在Python程序中嵌入(创建)交互式Python shell

zJa*_*Jay 56 python

是否可以在Python程序中启动交互式Python shell?

我想使用这样一个交互式Python shell(我的程序执行中运行)来检查一些程序内部变量.

phi*_*hag 57

代码模块提供了一个交互式控制台:

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()
Run Code Online (Sandbox Code Playgroud)

  • 请注意,`vars` 是一个内置函数。此外,在 Python 3.5+ 中,您可以使用 dict 扩展从两个现有词典创建“复合”词典:`variables = {**globals(), **locals()}`。 (2认同)
  • 是否可以在PyQt5中的widget中包装或封装interactiveconsole? (2认同)

lub*_*osz 18

在ipython 0.13+中你需要这样做:

from IPython import embed

embed()
Run Code Online (Sandbox Code Playgroud)


Mik*_*wis 6

我已经有了很长时间的代码,我希望你可以使用它.

要检查/使用变量,只需将它们放入当前命名空间即可.作为一个例子,我可以访问var1var2从所述命令行.

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()
Run Code Online (Sandbox Code Playgroud)

但是,如果您想严格调试应用程序,我强烈建议使用IDE或pdb(python调试器).


Fáb*_*niz 5

使用IPython你只需要调用:

from IPython.Shell import IPShellEmbed; IPShellEmbed()()
Run Code Online (Sandbox Code Playgroud)

  • 实际上,你应该使用`import IPython; IPython.embed();`.参见[本期](https://github.com/ipython/ipython/issues/286). (2认同)