如何从Python代码中删除REPL(读取,评估,打印,循环)

时间:2009-09-08 19:40:33

标签: python interactive

有没有办法以编程方式强制Python脚本在执行中的任意点放入REPL,即使脚本是从命令行启动的?

我正在编写一个快速而肮脏的绘图程序,我想从stdin或文件中读取数据,绘制它,然后放入REPL以允许自定义绘图。

7 个答案:

答案 0 :(得分:116)

我经常使用它:

def interact():
    import code
    code.InteractiveConsole(locals=globals()).interact()

答案 1 :(得分:92)

您可以尝试使用python的交互选项:

python -i program.py

这将执行program.py中的代码,然后转到REPL。您在program.py顶级定义或导入的任何内容都将可用。

答案 2 :(得分:40)

这是你应该怎么做的(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 REPLs的凯迪拉克。见http://ipython.org/ipython-doc/stable/interactive/reference.html#embedding-ipython

来自文档:

  

它在科学上也很有用   计算情况   常见需要做一些自动,   计算密集的部分和   然后停下来查看数据,情节等   打开一个IPython实例会给出   您可以完全访问您的数据和   功能,你可以恢复程序   完成后执行   互动部分(也许是为了停止   再来一次,根据需要多次。)

答案 3 :(得分:17)

您可以启动调试器:

import pdb;pdb.set_trace() 

不确定你想要什么REPL,但调试器非常相似。

答案 4 :(得分:17)

要使用iPython和调试器的功能,您应该使用ipdb

您可以使用与pdb相同的方式使用它,并添加:

import ipdb
ipdb.set_trace()

答案 5 :(得分:0)

我只是在我自己的一个脚本中执行此操作(它在一个自动化框架内运行,这是一个庞大的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解释器相同的语法检查状态(尽管它似乎不允许您进行模块导入)。 它不是很优雅,但它不需要任何其他设置。

答案 6 :(得分:0)

上面的答案很好,但如果您想在 IDE 中使用此功能。将 Visual Studio Code (v1.5.*) 与 Python Setup 结合使用:

  1. 突出显示您想要运行的行
  • right click 并从下拉列表中选择 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 执行。

享受 Python!