【发布时间】:2011-04-08 16:08:46
【问题描述】:
是否可以在 Python 程序中启动交互式 Python shell?
我想使用这样一个交互式 Python shell(在我的程序执行内部运行)来检查一些程序内部变量。
【问题讨论】:
-
您可以使用 pdb、IDE 调试器或
print。
标签: python
是否可以在 Python 程序中启动交互式 Python shell?
我想使用这样一个交互式 Python shell(在我的程序执行内部运行)来检查一些程序内部变量。
【问题讨论】:
print。
标签: python
code 模块提供了一个交互式控制台:
import readline # optional, will allow Up/Down/History in the console
import code
variables = globals().copy()
variables.update(locals())
shell = code.InteractiveConsole(variables)
shell.interact()
【讨论】:
vars 是一个内置函数。此外,在 Python 3.5+ 中,您可以使用字典扩展从两个现有字典创建“复合”字典:variables = {**globals(), **locals()}。
readline 似乎不存在了。 up/down/history 功能是否仍然可以通过某些标准库获得?
在 ipython 0.13+ 中你需要这样做:
from IPython import embed
embed()
【讨论】:
这段代码我用了很久了,希望你能用起来。
要检查/使用变量,只需将它们放入当前命名空间即可。例如,我可以从命令行访问var1 和var2。
var1 = 5
var2 = "Mike"
# Credit to effbot.org/librarybook/code.htm for loading variables into current namespace
def keyboard(banner=None):
import code, sys
# use exception trick to pick up the current frame
try:
raise None
except:
frame = sys.exc_info()[2].tb_frame.f_back
# evaluate commands in current namespace
namespace = frame.f_globals.copy()
namespace.update(frame.f_locals)
code.interact(banner=banner, local=namespace)
if __name__ == '__main__':
keyboard()
但是如果您想严格调试您的应用程序,我强烈建议使用 IDE 或pdb(python debugger)。
【讨论】:
使用 IPython,您只需调用:
from IPython.Shell import IPShellEmbed; IPShellEmbed()()
【讨论】:
import IPython; IPython.embed();。见this issue。
另一个技巧(除了已经建议的)是打开一个交互式 shell 并导入您的(可能已修改的)python 脚本。导入后,大多数变量、函数、类等(取决于整个事物的准备方式)都可用,您甚至可以从命令行交互地创建对象。所以,如果你有一个test.py 文件,你可以打开 Idle 或其他 shell,然后输入 import test(如果它在当前工作目录中)。
【讨论】:
exec(open("test.py").read())