如何在Python程序的中间开始一个交互式的Python/IPython会话?

9
我有一个Python程序,它首先执行一些任务,然后在特定条件下进入交互模式,用户可以访问带有当前程序范围的交互式Python控制台。现在,我使用代码模块通过调用code.InteractiveConsole(globals()).interact('')来实现这一点(请参见http://docs.python.org/2/library/code.html)。
我的问题是,生成的交互式控制台缺少一些通常在标准Python控制台中获得的功能(例如,在终端中键入“python”时获得的控制台),如记忆以前的命令等。是否有一种方法在我的Python程序中间获取相同的交互式控制台,甚至更好的是iPython的交互式控制台?

你使用的操作系统是什么? - jayelm
我不知道以下代码是否有效,如果有效,我也不知道为什么有效,但是在运行 code.InteractiveConsole(globals()).interact('') 之前尝试导入 readline。这似乎解决了我曾经遇到的类似问题。 - user2357112
2个回答

18

在当前使用 code.InteractiveConsole(globals()).interact('') 的地方,只需使用 IPython.embed()

但请务必先导入 IPython:

import IPython
# lots of code
# even more code
IPython.embed()

0

你可以使用内置的breakpoint()函数(在Python 3.7+中可用)来启动交互式IPython shell,使用IPython.embed()。这很好,因为它更短(不需要导入)。

默认情况下,breakpoint()会启动Python调试器。要使其启动ipython shell,您必须将环境变量PYTHONBREAKPOINT设置为IPython.embed

在Linux上

运行或添加到您的~/.bashrc~/.profile中:

export PYTHONBREAKPOINT="IPython.embed"

了解有关 breakpoint()的更多信息,请参阅PEP 553


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接