Importer une variable d'un script Python à un autre
J'ai script1.py
qui appelle script2.py (subprocess.call([sys.executable, "script2.py"])
. Mais script2.py
besoins variable x
qui est connu dans script1.py
. J'ai essayé un très simple import x from script1
mais il semble ne pas fonctionner.
Est que le droit de l'approche à utiliser?
Par exemple:
#script1.py
import subprocess, sys
##subprocess.call([sys.executable, 'C:\\...\\Desktop\\script2.py'], shell=True)
##os.system("C:\\...\\Desktop\\script2.py")
subprocess.Popen("C:\\...\\Desktop\\script2.py", shell=True)
print "BLAH"
x = BO
#script2.py
from script1 import x
print "HELLO"
print x
Tous les 3 cas de l'appel de script2 (sous-processus.appel, os.système de sous-processus.Popen ) ne fonctionnent pas. J'obtiens un "BLA", mais pas "BONJOUR".
source d'informationauteur Z77
Vous devez vous connecter pour publier un commentaire.
La syntaxe correcte est:
Donc, littéralement, "à partir de script1.py importer le "x" de l'objet."
Essayez ceci:
J'ai juste couru les pièces suivantes de code, et il a travaillé
script1:
c = 10
script2:
Le second script imprimé en nombre entier de 10 que vous devriez vous attendre.
17 Oct Edit:
En l'état, le code ne soit pas de produire le "Bonjour" comme indiquée, ou allez dans une boucle infinie. Un couple de questions:
Comme il est, la BO est pas défini. Lorsque vous exécutez script1, le sous-processus de script2 est ouvert. Lorsque script2 appels script1, il permet d'imprimer bla, mais ne parviennent pas à x=BO que le BO n'est pas défini.
Donc, si vous le corriger en précisant BO à-dire une chaîne de caractères, il ira dans une boucle infinie (chaque script appelant l'autre et de l'impression, x, Bonjour et Bla).
Un potentiel moyen pour résoudre ce problème est de passer de x par l'intermédiaire d'un appel de fonction. Donc, script2 pourrait prendre x comme paramètre de la fonction et de faire tout ce que vous devez faire avec elle.
Votre code est en boucle parce que le
subprocess.Popen
appel est dans le module de code d'initialisation, de sorte qu'il sera appelé par script2 lors de l'importation de script1 (création d'un nouveau script2 que les importations script1 ...)La manière recommandée d'avoir un fichier python utilisable à la fois comme un script et un module est d'utiliser le
__name__
variableMais cela ne fonctionne que pour constantes. Si
x
peut changer lors de l'exécution, vous aurez besoin d'une réelle communication interprocessus méthode.script1.py:
script2.py:
Script 0:
Script 1:
De sortie:
Donc oui ça fonctionne, pas besoin de sous-processus.
Je pense que vous devez vous référer à la variable en faisant précéder son nom du module (c'est à dire script1.x) script2.py