InteractiveConsole and namespace
Arnaud Delobelle
arnodel at googlemail.com
Sun Aug 29 04:00:08 EDT 2010
Chris Rebert <clp2 at rebertia.com> writes:
> On Sat, Aug 28, 2010 at 2:37 PM, David ROBERT <david at ombrepixel.com> wrote:
>> Hi all,
>>
>> I want to use an InteractiveConsole at some stage in a program to
>> interact with the local namespace: access, but also modify objects.
>> When the interactive console ends (ctrl-d) I want the program to
>> continue processing with the variables that may have been modified
>> interactively.
>>
[...]
>> However, on the other code below (the console is invoked from within a
>> function block), during the interactive session, I can read value of
>> a, I can change value of a. But the local namespace of the function is
>> not updated:
>>
>> import code
>> def test():
>> a=1
>> c = code.InteractiveConsole(locals())
>> c.interact() # Here I interactively change the value of a (a=2)
>> print "Value of a: ", a
>>
>> if __name__ == '__main__':
>> test()
>>
>> print returns --> Value of a: 1
>>
>> I need to run the InteractiveConsole from a function block. I tried
>> different things with the local and parent frames (sys._getframe())
>> but nothing successful. If I put a in the global namespace it works,
>> but I would like to
> [...]
>> understand what the
>> problem is.
>
> Read http://docs.python.org/library/functions.html#locals (emphasis added):
>
> "locals()
> [...]
> Note: The contents of this dictionary should not be modified;
[...]
Here is a solution:
def test():
a=1
loc = dict(locals())
c = code.InteractiveConsole(loc)
c.interact() # Here I interactively change the value of a (a=2)
for key in loc:
if key != '__builtins__':
exec "%s = loc[%r]" % (key, key)
print "Value of a: ", a
HTH
--
Arnaud
More information about the Python-list
mailing list