Exec acting like execfile

Hans Nowak wurmy at earthlink.net
Tue Aug 13 00:06:01 EDT 2002


Robert Hanlin wrote:
> Hi all,
> 
> exec is a keyword that just expects a string, while execfile() is a
> function that accepts a filename and dicts of global and local vars. 
> So execfile() seems more powerful.  But slower because you're reading
> in a file.
> 
> Is there any way to use exec with execfile's power?  I found that
> Python has an undocumented exec() function, but Jython doesn't.  And I
> need Jython.  How do others work around this?

Quite a few people would say, "by not using exec"... :-)

exec isn't a function, but a statement, and it can execute arbitrary code:

 >>> code = """
a = 42

print "Hello, world!"

for i in range(5):
     print a+i,
"""
 >>> exec code
Hello, world!
42 43 44 45 46

It also supports pasisng in dictionaries for global and local variables:

 >>> a = {}
 >>> b = {}
 >>> exec code in a, b
Hello, world!
42 43 44 45 46
 >>> a
[...lots of stuff...]
 >>> b
{'a': 42, 'i': 4}

I don't know enough about Jython to tell you how to work around this, but I can 
give you the general advice that is usually given on this newsgroup when it 
comes to using exec: Ask yourself why you need it, first. Why do you want to 
execute arbitrary (?) Python code? Can an 'import' do what you want? Can some 
of Python's other dynamic and introspective features?

HTH,

-- 
Hans (base64.decodestring('d3VybXlAZWFydGhsaW5rLm5ldA=='))
# decode for email address ;-)
The Pythonic Quarter:: http://www.awaretek.com/nowak/




More information about the Python-list mailing list