Je veux exécuter un script Python à partir d'un autre script Python. Je veux passer des variables comme je le ferais en utilisant la ligne de commande.
Par exemple, je lancerais mon premier script qui itérerait à travers une liste de valeurs (0,1,2,3) et passerait celles-ci au 2ème script. script2.py 0
puis script2.py 1
etc.
J'ai trouvé Question Stack Overflow 1186789 qui est une question similaire, mais la réponse de ars appelle une fonction, alors que je veux exécuter l'ensemble du script, pas seulement une fonction, et la réponse de balpha appelle le script mais sans arguments. J'ai changé cela en quelque chose comme le ci-dessous comme un test :
execfile("script2.py 1")
Mais il n'accepte pas les variables correctement. Lorsque j'imprime le sys.argv
dans script2.py c'est l'appel de la commande originale à la première script "[']. C:\script1.py '].
Je ne veux pas vraiment modifier le script original (c'est-à-dire script2.py dans mon exemple) puisque je ne le possède pas.
Je me dis qu'il doit y avoir un moyen de le faire, mais je ne sais pas comment vous vous y prenez.
1 votes
Si os.system n'est pas assez puissant pour vous, il y a le module de sous-processus .
1 votes
La question est de savoir si vous connaissez le nom du script (alors importez-le) ou si vous ne connaissez pas le nom du script au moment de la programmation (alors utilisez subprocess.call). Dans le second cas, cette question ne serait pas non plus un doublon. Comme la question n'est pas claire, elle n'est pas non plus vraiment bonne.
0 votes
@Trilarion : faux. Vous pouvez importer un module python même si son nom est généré au moment de l'exécution.
0 votes
@J.F.Sebastian D'accord. Une remarque complémentaire : Cette voie n'est pas vraiment bien couverte par aucune réponse ici ou dans la question liée, sauf en partie dans stackoverflow.com/a/1186840/1536976 .
1 votes
@Trilarion : pourquoi devrait-il être couvert du tout ? Les noms sont fixes dans les deux questions. Quoi qu'il en soit, la déclaration "si vous ne connaissez pas le nom du script au moment de la programmation (utilisez alors subprocess.call)." a tort quoi qu'il en soit. Si vous avez une nouvelle question ; demandez à .
0 votes
@J.F.Sebastian Encore une fois d'accord. Je n'ai pas de question pour le moment. Si j'en ai une, je la poserai sûrement.
1 votes
Oli4 "définitivement" est un mot fort. Vous pouvez développer ? Je vois la solution subprocess.call() qui accepte de passer plusieurs arguments de ligne de commande. Je vois
import
est mentionné pour les cas où la fonction main() est définie (cela n'aidera pas OP mais c'est la bonne méthode pour beaucoup d'autres personnes ayant un problème similaire). Je vois execfile() pour Python 2 qui utilise tout ce que vous mettez danssys.argv
(il est vrai que ce dernier point n'est pas mentionné explicitement) - cette option devrait être ignorée par les débutants. Il existe même une réponse explicite os.system() avec plusieurs arguments (la réponse qui est acceptée ici).0 votes
@J.F.Sebastian Après votre développement, je suis tenté d'être d'accord avec vous. Même si l'autre question ne spécifie pas explicitement comment envoyer des arguments ou que c'est nécessaire, les questions sont en effet similaires. Parfois, en posant une question différemment, des solutions différentes apparaissent comme la réponse de ChrisAdams qui a résolu mon problème. Je m'excuse pour ma déclaration précédente disant que ce n'est pas un doublon, et je vous remercie.