问题:如何从Python代码放入REPL(读取,评估,打印,循环)
有没有办法以编程方式强制Python脚本在执行过程中的任意点放入REPL,即使该脚本是从命令行启动的也是如此?
我正在编写一个快速而肮脏的绘图程序,我想从stdin或文件中读取数据,对其进行绘图,然后放入REPL中以允许对绘图进行自定义。
回答 0
您可以尝试使用python的交互式选项:
python -i program.py
这将执行program.py中的代码,然后转到REPL。您在program.py顶层中定义或导入的所有内容都将可用。
回答 1
我经常使用这个:
def interact():
import code
code.InteractiveConsole(locals=globals()).interact()
回答 2
这是您的操作方法(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实例将为您提供对数据和函数的完全访问权限,并且您可以在完成交互式部分的操作后继续执行程序(也许以后可以根据需要多次停止)。
回答 3
回答 4
您可以启动调试器:
import pdb;pdb.set_trace()
不确定您想要REPL做什么,但是调试器非常相似。
回答 5
我只是在自己的一个脚本中执行了此操作(它在自动化框架中运行,这是一个需要检测的巨大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解释器相同的语法检查状态(尽管似乎不允许您进行模块导入)。它不是很优雅,但是不需要任何其他设置。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。