如何从Python代码中放入REPL(读取,评估,打印,循环)

有没有一种方法可以通过编程的方式强制Python脚本在其执行的任意点放入REPL中,即使脚本是从命令行启动的?

我正在写一个快速而脏的绘图程序,我想从标准input或文件读取数据,绘制它,然后放入REPL以允许定制绘图。

您可以尝试使用python的交互选项:

python -i program.py 

这将执行program.py中的代码,然后转到REPL。 您可以在program.py的顶层定义或导入任何东西。

我经常使用这个:

 def interact(): import code code.InteractiveConsole(locals=globals()).interact() 

以下是你应该怎么做(IPython> v0.11):

 import IPython IPython.embed() 

对于IPython <= v0.11:

 from IPython.Shell import IPShellEmbed ipshell = IPShellEmbed() ipshell() # this call anywhere in your program will start IPython 

你应该使用IPython,Python REPL的凯迪拉克。 请参阅http://ipython.org/ipython-doc/stable/interactive/reference.html#embedding-ipython

从文档:

它也可以用在科学计算的情况下,通常需要做一些自动的,计算密集的部分,然后停下来看看数据,地块等等。打开一个IPython实例将会给你充分的数据和函数的访问权限,一旦你完成了交互部分,你可以恢复程序执行(也许稍后再次停止,根据需要多次)。

您可以启动debugging器:

 import pdb;pdb.set_trace() 

不知道你想要的REPL,但debugging器是非常相似的。

要使用iPython和debugging器的function,您应该使用ipdb ,

您可以像使用pdb一样使用它,并添加以下内容:

 import ipdb ipdb.set_trace() 

我只是在我自己的脚本之一(它运行在一个自动化框架内,是一个庞大的PITA仪器):

 x = 0 # exit loop counter while x == 0: user_input = raw_input("Please enter a command, or press q to quit: ") if user_input[0] == "q": x = 1 else: try: print eval(user_input) except: print "I can't do that, Dave." continue 

只要把这个放在任何你想要断点的地方,你就可以使用与Python解释器相同的语法来检查状态(尽pipe它似乎不能让你做模块导入)。 这不是很优雅,但它不需要任何其他设置。