即使脚本是从命令行启动的,有没有一种方法可以通过编程强制 Python 脚本在执行过程中的任意一点掉入 REPL?
我正在编写一个快速的绘图程序,我想从 stdin 或文件中读取数据,绘制数据,然后将其放入 REPL 中,以允许对绘图进行定制。
可以启动调试器:
import pdb;pdb.set_trace()
不确定要 REPL 做什么,但是调试器非常类似。
下面是你应该怎么做(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,它是 PythonREPL 中的 Cadillac
根据文件:
它在科学研究中也是有用的 计算的情况下,它是 通常需要做一些自动化, 计算密集型零件及 然后停下来看看数据、图表等。 打开一个 IPython 实例将给出 你完全可以查阅你的资料 函数,并且可以恢复程序 一旦您完成了 互动部分(也许是为了停止 再来一次,需要多少次就多少次)。
您可以尝试使用 python 的交互式选项:
python -i program.py
这将执行 Program.py 中的代码,然后转到 REPL。在 Program.py 的顶层定义或导入的任何内容都可以使用。
我经常这样说:
def interact(): import code code.InteractiveConsole(locals=globals()).interact()
要使用 iPython 和调试器的功能,应该使用 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 解释器相同的语法检查状态(尽管它似乎不允许进行模块导入)。 它不是很优雅,但不需要任何其他设置。
上面的答案很棒,但是如果你想在你的 IDE中使用这个功能,在 Python 安装程序中使用 VisualStudio 代码(v1.5. *) :
Run Selection/Line in Interactive Window
shift + enter
Python
Run Current File in Interactive Window
这将启动一个交互式会话,包括 linting、代码完成和语法突显:
输入要计算的代码,然后在键盘上按 shift + enter执行。
好好享受巨蟒吧!