如何从 Python 代码进入 REPL (Read,Eval,Print,Loop)

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

我正在编写一个快速的绘图程序,我想从 stdin 或文件中读取数据,绘制数据,然后将其放入 REPL 中,以允许对绘图进行定制。

48333 次浏览

可以启动调试器:

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. *) :

  1. 突出显示要运行的行,然后
  • 从下拉列表中选择 Run Selection/Line in Interactive Window
  • 在键盘上按 shift + enter键。

enter image description here

  1. 右键单击要在文件资源管理器中执行的 Python文件,并选择 Run Current File in Interactive Window

enter image description here

这将启动一个交互式会话,包括 linting、代码完成和语法突显:

enter image description here

enter image description here

输入要计算的代码,然后在键盘上按 shift + enter执行。

好好享受巨蟒吧!