interactive execution

Jeff Shannon jeff at ccvcorp.com
Tue Feb 8 21:12:32 EST 2005


Jive Dadson wrote:

> How does one execute arbitrary text as code within a module's context?
> 
> I've got some code that compiles some text and then executes it.  When
> the string is "print 'Hello'", it prints "Hello".  I get no exception
> when I compile and execute "foo = 555".  If I then compile and exec
> "print foo", I get a name error. The variable foo is undefined. My
> assumption is that the "exec" command created a new namespace, put "foo"
> in that namespace, and then threw the namespace away.  Or something.

You can do

    exec codestring in globaldict, localdict

(Or something like that, this is from unused memory and is untested.) 
  The net effect is that exec uses the subsequent dictionaries as its 
globals and locals, reading from and writing to them as necessary.

(Note that this doesn't get you any real security, because malicious 
code can still get to __builtins__ from almost any object...)

Jeff Shannon
Technician/Programmer
Credit International




More information about the Python-list mailing list