将变量传递回Python交互式控制台会话的调用者

时间:2013-06-15 11:58:41

标签: python python-2.7

我可以在Python脚本中间设置交互式控制台,如下所示:

import code

a, b = 5, 7
c = [1, 2, 34]
shareVars = {'a':a, 'b':b, 'c':c}
shell = code.InteractiveConsole(shareVars)
print 'Before interacting, variables are: ', a, b, c
shell.interact('Available variables: %s' % ', '.join(shareVars.keys()))
print 'Done interacting, variables are: ', a, b, c

在Windows上按Ctrl+Z时,会话将返回脚本并打印出发送到交互式会话的变量值。

现在,我想以某种方式将对交互会话中变量的修改传达给我的脚本。我注意到这似乎只适用于交互式会话中的可变对象的就地修改。

例如,如果我在交互式会话中键入以下内容:

>>> c.append(5)    # change will be carried over to the script
>>> c = [56, 67]  # c will remain unchanged in the original script
>>> a+=3           # a will remain unchanged in the original script

退出主脚本后,我得到以下输出:

Done interacting, variables are: ', 5, 7, [1, 2, 34, 5]

有没有办法消除可变对象的就地修改和所有其他类型的更改之间的区别?如何轻松地将变量从交互式会话传递回脚本?我必须走pickle-unpickle路线吗?

1 个答案:

答案 0 :(得分:4)

您的shareVars字典是交互式shell工作的命名空间;该命名空间的任何赋值都直接反映在该字典中。

如果您需要往返某些变量,则需要从shareVars字典中设置这些变量:

a, b, c = shareVars['a'], shareVars['b'], shareVars['c']

与Python中的其他地方一样,在交互式shell中重新绑定变量会使更新对旧值的其他引用。