Python: "subprocess.Popen" vérifie le succès et les erreurs
Je veux vérifier si un sous-processus a fini de l'exécution avec succès ou de leur échec. Actuellement, j'ai une solution mais je ne sais pas si c'est correct et fiable. Est-il garanti que tous les processus de sorties de ses erreurs uniquement sur la sortie stderr respectueusement vers stdout:
Note: je ne suis pas intéressé par la redirection d'impression de la sortie. Ce que je sais déjà comment faire.
pipe = subprocess.Popen(command,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True)
if "" == pipe.stdout.readline():
print("Success")
self.isCommandExectutionSuccessful = True
if not "" == pipe.stderr.readline():
print("Error")
self.isCommandExectutionSuccessful = True
sinon:
if "" == pipe.stdout.readline():
print("Success")
self.isCommandExectutionSuccessful = True
else:
print("Error")
self.isCommandExectutionSuccessful = False
et:
if not "" == pipe.stderr.readline():
print("Success")
self.isCommandExectutionSuccessful = True
else:
print("Error")
self.isCommandExectutionSuccessful = False
source d'informationauteur Zingam
Vous devez vous connecter pour publier un commentaire.
Avez-vous besoin de faire quoi que ce soit avec la sortie du processus?
La
check_call
méthode pourrait être utile ici. Voir le python docs ici: https://docs.python.org/2/library/subprocess.html#subprocess.check_callVous pouvez ensuite utiliser ceci comme suit:
Toutefois, cela repose sur la
command
de retourner un code de sortie 0 pour la réussite et une valeur non nulle pour une erreur.Si vous avez besoin de capturer la sortie, le
check_output
méthode peut être plus approprié. Il est toujours possible de rediriger la sortie d'erreur standard si vous avez besoin de cela.Voir les docs ici: https://docs.python.org/2/library/subprocess.html#subprocess.check_output
Vous pouvez vérifier le code de retour du processus à l'aide check_call() la méthode.
Dans le cas où si renvoyés valeur non nulle CalledProcessError sera soulevée.
Cela va attendre que la commande se termine et vous donner de sortie ou d'erreur en fonction de l'état de la commande.
C'est la façon dont je l'ai fait finalement:
J'espère que ce sera utile à quelqu'un d'autre.
Solution complète de vérifier le code de retour, stdout et stderr:
Imprime: