Comment puis-je frayer de nouvelles coques pour exécuter des scripts Python à partir d'une base de script Python?
J'ai réussi à exécuter plusieurs scripts Python, les appelant à partir d'une base de script à l'aide de la sous-processus module:
subprocess.popen([sys.executable, 'script.py'], shell=True)
Cependant, chacun de ces scripts exécute des simulations.les fichiers exe à partir d'une application C++) qui génèrent une sortie de la coquille. Toutes ces sorties sont écrites à la base de la coquille de l'endroit où j'ai lancé ces scripts. Je voudrais générer un nouveau shell pour chaque script. J'ai essayé de générer de nouvelles coquilles à l'aide de la shell=True
attribut lors de l'appel de sous-processus.appel (aussi essayé avec popen), mais ça ne fonctionne pas.
Comment puis-je obtenir un nouveau shell pour chaque processus générées avec le processus secondaire.appel?
J'ai été la lecture de la documentation sur l'entrée standard stdin et stdout comme suggéré par Spencer et a trouvé un drapeau de l'résolu le problème: sous-processus.CREATE_NEW_CONSOLE. Peut-être rediriger les tuyaux fait le travail aussi, mais cela semble être la solution la plus simple (du moins pour ce problème spécifique). Je viens de le tester et a parfaitement fonctionné:
subprocess.popen([sys.executable, 'script.py'], creationflags = subprocess.CREATE_NEW_CONSOLE)
- Voulez-vous dire que vous souhaitez exécuter les scripts dans les différentes fenêtres du terminal? Si oui, quel programme de terminal que vous utilisez?
- oui, je veux courir chaque script dans une autre fenêtre de terminal. Je suis à l'aide de la base de la Fenêtre de terminal (juste en cours d'exécution cmd)
- Je ne sais pas beaucoup au sujet de Windows. Cela aide: stackoverflow.com/questions/303838/... ? (c'est à dire
start cmd.exe
oustart python script.py
... ) - Vous devez accepter de Spencer réponse.
- merci! C'est mon deuxième fois et je ne savais pas.
- Pas de problème. Je suis content que vous avez trouvé une solution à votre problème.
Vous devez vous connecter pour publier un commentaire.
Popen déjà génère un sous-processus gérer les choses. Vous avez juste besoin de rediriger la sortie des tuyaux. Regardez les sous-processus de la documentation, en particulier la section sur popen stdin, stdout et stderr de redirection.
Si vous n'avez pas de rediriger ces tuyaux, il hérite de l'objet parent. Juste être prudent sur le blocage de vos processus.
Vous voulais des fenêtres supplémentaires pour chaque sous-processus. Il est fait ainsi. Regardez les startupinfo section de sous-processus. Il explique quelles sont les options à régler sur windows lancer un nouveau terminal pour chaque sous-processus. Notez qu'il nécessite l'utilisation du shell=True option.
Pour ouvrir dans une autre console, n' (testé sur Windows 7 /Python 3):
CREATE_NEW_CONSOLE
ne peut être utilisé pour le système d'exploitation Windows. (Source)Ce n'est pas réellement répondre à votre question. Mais j'ai eu des problèmes avec les sous-processus trop, et pexpect s'est avéré pour être vraiment utile.
pexpect
serait d'une grande aide, car il nécessite lepth
module car il n'est pas pris en charge sur Windows (qui, je crois, l'OP est l'aide car il a mentionné en cours d'exécution ".exe" des fichiers).