1

我可以在 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

在窗口上按下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条路吗?

4

1 回答 1

4

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

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

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

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

于 2013-06-15T12:05:10.980 回答