Lorsque j'exécute un script python en utilisant subprocess.Popen(script, shell=True)
en un autre script python, est-il possible d'alerter python lorsque le script est terminé avant d'exécuter d'autres fonctions? Sur une note de côté, est-ce que je peux obtenir une sortie en temps réel du script python exécuté?
Je peux seulement obtenir la sortie de cela en faisant command>output.txt
mais c'est seulement après que tout le processus se termine. stdout
ne salue aucune sortie.Python: Vérifier quand une commande cmd termine son travail
2
A
Répondre
3
Lorsque vous créez un sous-processus avec Popen, il retourne un objet subprocess.Popen
qui a plusieurs méthodes pour accéder à l'état de sous-processus et les données:
- Vous pouvez utiliser
poll()
pour déterminer si un sous-processus est terminé.None
indique que le processus est terminé. - Sortie d'un script pendant son exécution peut être récupérée avec
communicate()
.
Vous pouvez combiner ces deux pour créer un script qui surveille la sortie d'un sous-processus et attend jusqu'à ce que son prêt comme suit:
import subprocess
p = subprocess.Popen((["python", "script.py"]), stdout=subprocess.PIPE)
while p.poll() is None:
(stdout, stderr) = p.communicate()
print stdout
1
Vous voulez attendre la Popen à la fin? Avez-vous essayé simplement ceci:
popen = subprocess.Popen(script, shell=True)
popen.wait()
Avez-vous pensé à utiliser le script python externe importer en tant que module au lieu de fraie un sous-processus?
En ce qui concerne la sortie en temps réel: essayez python -u ...
Voulez-vous que le processus original qui a donné naissance au sous-processus est informé? Ou existe-t-il un processus séparé qui surveille l'exécution du script? En d'autres termes: cherchez-vous un simple "attendre que le script s'exécute" ou voulez-vous exécuter un script Python parallèlement au sous-processus? – jsalonen