“Teilprozess.Popen" - Prüfung für Erfolg und Fehler
Möchte ich überprüfen, ob ein Teilprozess beendet hat, wird die Ausführung erfolgreich war oder nicht. Derzeit ich kommen mit einer Lösung, aber ich bin nicht sicher, wenn Sie korrekt und zuverlässig. Ist es garantiert, dass jeder Prozess gibt seine Fehler nur auf stderr respektvoll zu stdout
:
Hinweis: ich bin nicht daran interessiert, nur umleiten/Bedrucken aus der Ausgabe. Dass ich bereits weiß, wie zu tun ist.
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
alternativ:
if "" == pipe.stdout.readline():
print("Success")
self.isCommandExectutionSuccessful = True
else:
print("Error")
self.isCommandExectutionSuccessful = False
und:
if not "" == pipe.stderr.readline():
print("Success")
self.isCommandExectutionSuccessful = True
else:
print("Error")
self.isCommandExectutionSuccessful = False
InformationsquelleAutor Zingam | 2014-08-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Brauchen Sie nichts zu tun mit dem Ausgang des Prozesses?
Den
check_call
Methode könnte hier ganz nützlich sein. Finden Sie die python docs hier: https://docs.python.org/2/library/subprocess.html#subprocess.check_callDann können Sie dies wie folgt:
Jedoch, diese stützt sich auf die
command
Rückkehr exit-code 0 für den erfolgreichen Abschluss und einem nicht-null-Wert für einen Fehler.Wenn Sie brauchen, um zu erfassen, die Ausgabe, dann die
check_output
Methode besser geeignet sein können. Es ist immer noch möglich, die Umleitung der standard-Fehler, wenn Sie müssen dies auch.Siehe die Dokumentation hier: https://docs.python.org/2/library/subprocess.html#subprocess.check_output
OK. Es gibt auch die
check_output
Methode. Erhalten Sie die stdout-und stderr von denen und immer noch den Fehler abzufangen. Siehe hier: docs.python.org/2/library/...Das war der Auftrag!
OK - etwas verwirrt, als warum Sie habe daher angenommen, Alexey Antwort gegeben haben, dass Sie nicht verwendet werden, seinen Vorschlag in Ihre Arbeit Beispiel. Ich bin jedoch sehr froh, konnte ich helfen.
Dieser arbeitete für mich!
InformationsquelleAutor elParaguayo
Können Sie überprüfen, return-code, der den Prozess mit check_call () - Methode.
Im Falle dass, wenn Prozess zurückgegeben, die nicht null Wert CalledProcessError angehoben werden.
ist None bedeutet, dass der Prozess noch läuft. Hinweis:
p.returncode
können nichtNone
nachp.communicate()
.InformationsquelleAutor Alexey Bureev
Dieser wird warten, bis Befehl beendet ist, und geben Sie eine Ausgabe oder Fehler abhängig vom Status des Befehls.
InformationsquelleAutor vks
Komplette Lösung mit überprüfung auf code zurück, stdout und stderr:
Drucke:
InformationsquelleAutor PJ_Finnegan
Dies ist, wie ich es Tat schließlich:
Ich hoffe, es wird nützlich sein, um jemand anderes.
check_output()
gibt alle Ausgabe als eine einzelne Zeichenfolge.for character in some_string
Erträge-Zeichen in Python, nicht Zeilen. Auch Sie Ihre GUI eingefroren werden, während der Kind-Prozess ausgeführt wird. Sie verwenden sollten, threads oder async. io zu vermeiden, blockiert die GUI. Siehe code-Beispiele in den linksInformationsquelleAutor Zingam