2010-10-06 6 views
2

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

+0

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

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 ...

Questions connexes