在pdb会话中将变量传递回原始交互会话是否可能?
我正在使用pdb这个工具来检查一个在ipython会话中运行的脚本,命令是run -d
。我希望能绘制一些变量的图,但我需要在主ipython环境中才能做到这一点。
所以我想找一种方法,让我在退出pdb后,能把一个变量带回到主交互会话中。如果你在最上面的框架中设置一个变量,它似乎会出现在ipython会话中,但如果是在更下面的框架,这个方法就不管用了。
我想要的效果有点像下面的export
命令:
ipdb> myvar = [1,2,3]
ipdb> p myvar
[1, 2, 3]
ipdb> export myvar
ipdb> q
In [66]: myvar
Out[66]: [1, 2, 3]
1 个回答
3
根据ipython的文档和ipython提示符下的run?
命令,
执行后,IPython的交互命名空间会更新,包含程序中定义的所有变量(除了
__name__
和sys.argv)。
这里所说的“在程序中定义”其实是个不太严谨的说法,它并不是指“在任何嵌套函数中”,而是指“在你正在run
的脚本或模块的globals()
中”。如果你在某种嵌套结构中,globals()['myvar'] = [1,2,3]
依然可以正常工作,就像你希望的export
一样,如果它存在的话。
编辑:如果你在一个不同的模块中,你需要在原始模块的全局变量中设置名称——如果需要先import sys
,那么sys.modules["originalmodule"].myvar = [1, 2, 3]
就能实现你想要的效果。