By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
439,957 Members | 1,936 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 439,957 IT Pros & Developers. It's quick & easy.

Problem with exec

P: n/a
I'm trying to parallise with python. Specifically I'm sending code to
the processes and let them exec this code (in ascii form). However I
ran into a problem with Namespaces (I think) which I do not understand.

Here's what I do first:
---------------------------------------
bash-3.2$ cat execBug.py
#! /usr/bin/python
header="""
from scipy import randn
def f():
return randn()
"""
exec header
print "f() =",f()

bash-3.2$ ./execBug.py
f() = 0.633306324515
it est: it works.
However when I do this:

bash-3.2$ cat execBug2.py
#! /usr/bin/python
header="""
from scipy import randn
def f():
return randn()
"""
def g():
exec header
return f()
print "g() =",g()
bash-3.2$ ./execBug2.py
g() =
Traceback (most recent call last):
File "./execBug2.py", line 10, in <module>
print "g() =",g()
File "./execBug2.py", line 9, in g
return f()
File "<string>", line 4, in f
NameError: global name 'randn' is not defined
bash-3.2$ ???

I get this global name error. I can fix it with adding some line like
"global randn" but I don't want to do this. I want to do exactly what
I wrote: Import the function scipy.randn in the local namespace of the
function "g" so that "return f()" makes sense. Can anybody help me out?
Yours Justus
Mar 13 '08 #1
Share this Question
Share on Google+
2 Replies


P: n/a
On Mar 14, 9:47 am, Justus Schwabedal <justus.schwabe...@gmx.de>
wrote:
[snipped]
However when I do this:

bash-3.2$ cat execBug2.py
#! /usr/bin/python
header="""
from scipy import randn
def f():
return randn()
"""
def g():
exec header
return f()
print "g() =",g()
bash-3.2$ ./execBug2.py
g() =
Traceback (most recent call last):
File "./execBug2.py", line 10, in <module>
print "g() =",g()
File "./execBug2.py", line 9, in g
return f()
File "<string>", line 4, in f
NameError: global name 'randn' is not defined
bash-3.2$ ???

I get this global name error. I can fix it with adding some line like
"global randn" but I don't want to do this. I want to do exactly what I wrote: Import the function scipy.randn in the local namespace of the

function "g" so that "return f()" makes sense. Can anybody help me out?
Yours Justus
Maybe using an explicit namespace is good enough for your needs:

#! /usr/bin/python
header="""
from scipy import randn
def f():
return randn()
"""
def g():
n = {}
exec header in n
return n['f']()
print "g() =",g()
(i don't understand the issues, but I can cut-and-paste with the best
of them)
Mar 14 '08 #2

P: n/a

On Mar 14, 2008, at 4:41 AM, al******@gmail.com wrote:
On Mar 14, 9:47 am, Justus Schwabedal <justus.schwabe...@gmx.de>
wrote:
[snipped]
>However when I do this:

bash-3.2$ cat execBug2.py
#! /usr/bin/python
header="""
from scipy import randn
def f():
return randn()
"""
def g():
exec header
return f()
print "g() =",g()
bash-3.2$ ./execBug2.py
g() =
Traceback (most recent call last):
File "./execBug2.py", line 10, in <module>
print "g() =",g()
File "./execBug2.py", line 9, in g
return f()
File "<string>", line 4, in f
NameError: global name 'randn' is not defined
bash-3.2$ ???

I get this global name error. I can fix it with adding some line like
"global randn" but I don't want to do this. I want to do exactly
what I wrote: Import the function scipy.randn in the local
namespace of the

function "g" so that "return f()" makes sense. Can anybody help me
out?
Yours Justus

Maybe using an explicit namespace is good enough for your needs:

#! /usr/bin/python
header="""
from scipy import randn
def f():
return randn()
"""
def g():
n = {}
exec header in n
return n['f']()
print "g() =",g()
(i don't understand the issues, but I can cut-and-paste with the best
of them)
--
http://mail.python.org/mailman/listinfo/python-list
That's what I was looking for: It's probably even a faster solution
than declaring all the imports global, isn't it?

Mar 14 '08 #3

This discussion thread is closed

Replies have been disabled for this discussion.