如何从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它似乎不能让你做模块导入)。 这不是很优雅,但它不需要任何其他设置。