在python程序中embedded(创build)一个交互式的python shell

是否有可能在python程序中启动一个交互式的python shell?

我想用这样一个交互式的python shell( 我的程序执行中运行)来检查一些程序内部的variables。

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

 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() 

在ipython 0.13+你需要这样做:

 from IPython import embed embed() 

我已经有了这个代码很长一段时间,我希望你可以把它使用。

要检查/使用variables,只需将它们放入当前名称空间。 作为一个例子,我可以从命令行访问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() 

但是,如果你想严格地debugging你的应用程序,我会强烈build议使用IDE或pdb(pythondebugging器) 。

使用IPython你只需要调用:

 from IPython.Shell import IPShellEmbed; IPShellEmbed()() 

另一个技巧(除了已经build议的),打开一个交互式shell并导入(也许是修改过的)python脚本。 在导入时,大多数variables,函数,类等等(取决于整个事情的准备情况)是可用的,甚至可以从命令行以交互方式创build对象。 所以,如果你有一个test.py文件,你可以打开Idle或其他shell,并inputimport test (如果它在当前工作目录中)。