3

我正在使用 pdb 来检查run -d在 ipython 会话中调用的脚本。能够绘制一些变量会很有用,但我需要它们在主 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]
4

1 回答 1

3

根据 ipython 的文档,以及run?来自 ipython 提示符的命令,

执行后,IPython 交互式命名空间会更新为程序中定义的所有变量(__name__ sys.argv 除外)

通过“在程序中定义”(稍微草率地使用术语),它并不意味着“在那里找到的任何嵌套函数中的任何地方”——它的意思是“在globals()你正在使用的脚本/模块中run。如果你”在任何类型的嵌套中,globals()['myvar'] = [1,2,3]应该仍然可以正常工作,就像你希望的export那样,如果它存在的话。

编辑:如果您在不同的模块中,则需要在原始模块的全局变量中设置名称——import sys如果需要,sys.modules["originalmodule"].myvar = [1, 2, 3]将按照您的意愿进行操作。

于 2009-07-11T19:37:58.827 回答