2010-07-16 5 views
0

J'ai deux fichiers python en 1.py et 2.py.Comment passer une variable dans une instruction exec en python

**1.py is as** 
class A: 
     def __init__(self): 
       x = 5 
       y = 7 
       NUMBERS = self 
       fp = open(filePath) 
       temp = fp.read() 
       exec(temp) 
       fp.close() 
       ADD_METHOD() 

**2.py is as** 
    def ADD_METHOD(): 
      print NUMBERS.x + NUMBERS.y 

Maintenant Ma question de savoir comment ce NUMBER est disponible dans le fichier 2.py. Ceci est un exemple pour une meilleure visualisation du problème, je sais que je peux le faire en important le module mais le problème est que je dois faire la solution avec la méthode exec() et je peux obtenir NUMBERS dans le fichier 2.py passer cela avec exec comme argument ou une autre approche.

Toute aide vraiment appréciable Merci

+0

Parlez-vous de la déclaration 'exec' de * *, ou sur le' os.exec() '? –

+0

J'espère que ce "exec (2.py)" devrait être l'instruction –

+0

'exec' ne prend pas les noms de fichiers, donc cela ne aide pas. –

Répondre

0

Je ne suis pas sûr de ce que vous avez besoin exactement, mais j'ai une solution à votre exemple trivial qui suit vos limites.

# 1.py 
... 
os.execl("2.py", str(NUMBERS.x), str(NUMBERS.y)) 

# 2.py 
from collections import namedtuple 
A = namedtuple("A", "x y") 
NUMBERS = A(x=sys.argv[1], y=sys.argv[2]) 
... 
2

Si ce sont les deux fichiers Python que vous vous écriviez, pourquoi ne pas simplement créer une fonction dans 2.py que vous pouvez importer et faire appel à 1.py? C'est une abstraction beaucoup plus facile et plus propre. Cela évite également la création d'un nouveau processus. Vous pouvez écrire quelque chose comme ceci:

# **1.py is as** 
from 2 import ADD_METHOD 
class A: 
     def __init__(self): 
       x = 5 
       y = 7 
       ADD_METHOD(x, y) 

# **2.py is as** 
    def ADD_METHOD(x, y): 
      print x + y 

Notez que vous devez vraiment prendre de meilleurs noms que 1.py et 2.py pour éviter toute confusion plus tard;)

Questions connexes