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

dsi*_*cha 100 python interactive

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

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

Jas*_*mbs 118

我经常使用这个:

def interact():
    import code
    code.InteractiveConsole(locals=globals()).interact()
Run Code Online (Sandbox Code Playgroud)

  • 你可以做到比这更简单:导入代码; code.interact(本地=当地人()) (44认同)
  • "代码"模块的文档位于:http://docs.python.org/library/code.html (7认同)
  • 在`pdb`中,你可以使用`interact`. (2认同)

Ale*_*lex 96

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

python -i program.py
Run Code Online (Sandbox Code Playgroud)

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

  • 当你准备切换到黑暗的一面时,ipython -i program.py就在那里. (21认同)

joe*_*ker 42

这是你应该怎么做(IPython> v0.11):

import IPython
IPython.embed()
Run Code Online (Sandbox Code Playgroud)

对于IPython <= v0.11:

from IPython.Shell import IPShellEmbed

ipshell = IPShellEmbed()

ipshell() # this call anywhere in your program will start IPython
Run Code Online (Sandbox Code Playgroud)

你应该使用IPython,Python REPLs的凯迪拉克.见http://ipython.org/ipython-doc/stable/interactive/reference.html#embedding-ipython

从文档:

它在科学计算情况下也很有用,在这种情况下,通常需要做一些自动的,计算密集的部分然后停下来查看数据,图表等.打开IPython实例将使您可以完全访问您的数据和函数,完成交互式部分后,您可以恢复程序执行(可能会在以后再次停止,根据需要多次停止).

  • IPython很棒,但是如果OP想要一个只使用内置Python的解决方案,那么Jason的code.InteractiveConsole()解决方案就是你"应该"做到的.:-) (3认同)

Ned*_*der 17

您可以启动调试器:

import pdb;pdb.set_trace() 
Run Code Online (Sandbox Code Playgroud)

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

  • 我怀疑他想对正在运行的进程进行实时更改,即Lisp. (3认同)

blu*_*zcz 17

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

您可以像使用pdb一样使用它,并添加:

import ipdb
ipdb.set_trace()
Run Code Online (Sandbox Code Playgroud)