[Python] Problemi con l'interpretazione di codice da stringa

michele a nectarine.it michele a nectarine.it
Mar 23 Feb 2010 12:24:25 CET


Ciao,
sto cercando di realizzare un applicativo che legga delle stringhe di  
testo e le interpreti come codice Python. Trascurando [per il momento]  
le eventuali implicazioni di security, il codice che ho scritto e` il  
seguente:

import new
import sys

###
main = """
import math

for x in xrange(5):
         print x

print 'main done'

"""

helper = """
import main
for i in xrange(5):        print math.sin(i)
print 'helper done'

"""
###


filesparsedNames = ['main', 'helper']

def moduleimporter(name):
         mod = new.module(name)
         try:
                 exec eval(name) in mod.__dict__
         except Exception, e:
                 print("Exception %s while trying to evaluate module  
%s" % (e, eval(name)))

moduleimporter(filesparsedNames[0])
moduleimporter(filesparsedNames[1])



Il codice funziona perfettamente nell'interpretare la prima stringa,  
ovvero il main, mentre nel secondo caso non funziona riportando  
quest'errore:
{'e': NameError("name 'math' is not defined",), 'name': 'helper',  
'mod': <module 'helper' (built-in)>}

A cosa puo` essere dovuto?
Penso che sia un problema di locals() e globals(), ma prima vorrei  
sentire anche un vostro parere.

Grazie!
   Michele




Maggiori informazioni sulla lista Python