【发布时间】:2010-11-26 14:59:24
【问题描述】:
有没有办法以编程方式强制 Python 脚本在其执行过程中的任意点放入 REPL,即使脚本是从命令行启动的?
我正在编写一个快速而肮脏的绘图程序,我想从标准输入或文件中读取数据,绘制它,然后放入 REPL 以允许自定义绘图。
【问题讨论】:
标签: python interactive
有没有办法以编程方式强制 Python 脚本在其执行过程中的任意点放入 REPL,即使脚本是从命令行启动的?
我正在编写一个快速而肮脏的绘图程序,我想从标准输入或文件中读取数据,绘制它,然后放入 REPL 以允许自定义绘图。
【问题讨论】:
标签: python interactive
我经常用这个:
def interact():
import code
code.InteractiveConsole(locals=globals()).interact()
【讨论】:
pdb内,可以使用interact。
您可以尝试使用 python 的交互选项:
python -i program.py
这将执行 program.py 中的代码,然后转到 REPL。您在 program.py 顶层定义或导入的任何内容都将可用。
【讨论】:
您应该这样做(IPython > v0.11):
import IPython
IPython.embed()
对于 IPython
from IPython.Shell import IPShellEmbed
ipshell = IPShellEmbed()
ipshell() # this call anywhere in your program will start IPython
您应该使用 Python REPL 的凯迪拉克 IPython。见http://ipython.org/ipython-doc/stable/interactive/reference.html#embedding-ipython
来自文档:
它也可以用于科学 计算它所在的情况 常见的需要做一些自动的, 计算密集型部分和 然后停下来查看数据、图表等。 打开一个 IPython 实例将给出 您完全访问您的数据和 功能,您可以恢复程序 完成后执行 互动部分(可能停止 稍后再重复一次,根据需要多次)。
【讨论】:
您可以启动调试器:
import pdb;pdb.set_trace()
不确定您想要 REPL 做什么,但调试器非常相似。
【讨论】:
breakpoint()内置函数达到同样的效果。
【讨论】:
我只是在我自己的一个脚本中做到了这一点(它在一个自动化框架内运行,这是一个巨大的 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 解释器相同的语法检查状态(尽管它似乎不允许你进行模块导入)。 它不是很优雅,但不需要任何其他设置。
【讨论】:
上面的答案很好,但如果您想在 IDE 中使用此功能。将Visual Studio Code (v1.5.*) 与Python Setup 一起使用:
right click 并从下拉列表中选择 Run Selection/Line in Interactive Window。shift + enter。Python文件并选择Run Current File in Interactive Window
这将启动一个交互式会话,包括 linting、代码完成和语法高亮:
输入您要评估的代码,然后点击键盘上的shift + enter 执行。
享受 Python!
【讨论】: