Bonjour,

Je souhaite exécuter le contenu d'un programme python (par exemple python2.py) à partir d'un programme python1.py.
Or lorsque l'exécution est lancée au sein du bloc d'instructions du 1er programme (après le if __name__ == "main"), le 2ème est exécuté avec succès. En revanche, lorsque il est lancé à partir d'une fonction définie hors bloc d'instructions, le 2ème est "mal lu", i.e. lu en partie seulement. En effet, des fonctions et classes sont définies avant les instructions et ces définitions de classes ne sont pas lues automatiquement. Je vous montre un exemple de code, parce que ce n'est pas très clair pour l'instant.

python1.py
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
def lancer() :
    execfile("python2.py")
 
if __name__ == __"main"__ :
   lancer()
python2.py
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
class MaClasse1 :
   def __init__ (self) :
      self.num = int()
      self.strg = str()
 
class MaClasse2 :
   def __init__(self) :
      self.cl = MaClasse1()
 
if __name__ == __"main"__ :
   a = MaClasse1()
   a.num = 1
   a.strg = "ça marche"
   b = MaClasse2()
   b.cl = a
   print b.cl.strg
 
##########################
Si j'exécute python1.py, l'instance de classe MaClasse2 (i.e., b) n'arrive pas à être définie car le compilateur ne comprend pas ce qu'est MaClasse1 dans la définition de MaClasse2 (alors même qu'il vient de créer une instance de la classe MaClasse1 (i.e. a) avec succès).
C'est exactement pareil si j'importe un module (disons math) et que j'utilise une fonction sqrt() dans la définition d'une fonction ou d'une classe que je créée en amont du bloc d'instructions. Alors si une instruction utilise une de ces classes ou fonctions, il ne reconnait pas sqrt() comme si je n'avais pas importé le module math (alors que je l'ai fait bien sûr!).

Ce qui est étrange, c'est que ce problème n'arrive pas si l'execfile est situé effectivement dans le bloc d'instructions dans mon programme python1.py. Et malheureusement, je suis obligée de le lancer à partir d'une fonction (ça serait un peu long à expliquer ici...).

Quelqu'un a-t'il déjà rencontré ce problème ? Je ne vois pas trop ce que je pourrais faire à vrai dire. J'ai essayé quelques petites choses sans succès et je ne trouve aucune indication dans la doc python/forums en tous genres.

Merci de votre aide,
Aude