2016-11-03 4 views
0

Ich benutze Python subprocess, um ein Python-Skript (nennen wir es script2.py), und dieses Skript druckt Informationen zu stdout, die mit PIPE umgeleitet wird. Problem ist, dass script2.py stoppt Drucken von Informationen, aber es läuft weiter im Hintergrund. Ich möchte diesen Zustand erkennen (wenn nichts in stdout geschrieben wird). Gibt es einen Weg dazu?Wie erkennt man, ob Daten in stdout vorhanden sind?

kann ich dieses Verhalten simulieren mit folgenden:

script2.py

for i in range(0,1000): 
    if i < 500: 
     print "HUEHUE" 

Next 500 Iterationen nichts passieren wird, und das ist, was ich, um zu erfassen, müssen Sie das Skript erneut aus.

+0

Warum Subprozess verwenden, wenn Sie das Skript importieren und ausführen könnten? –

+0

@ cricket_007 das ist die ideale Lösung, manchmal arbeiten Sie mit Skripten, die Sie nicht geschrieben haben, und es ist einfacher, mit der Ausgabe umzugehen und dann mit dem Skript zu interagieren. Wenn er es selbst geschrieben hat, stimme ich dir vollkommen zu. – bravosierra99

+0

Leider wurde 'script2.py' nicht von mir geschrieben, mir wurde nur das Skript gegeben, das' script2.py' ausführt, um den "Pause" -Zustand zu erkennen. –

Antwort

0

Popen.stdout Wenn das Argument stdout PIPE war, ist dieses Attribut ein Dateiobjekt, das die Ausgabe des untergeordneten Prozesses bereitstellt. Ansonsten ist es keine.

python documentation

So brauchen Sie wahrscheinlich eine Menge Zeit, um warten, um zu entscheiden, bevor Sie Ihre Prozesse anfängliche Ausgabe zu tun betrachten. Also proc.stdout.readline() dann schlafen (1) dann spülen und wiederholen.

+0

Eigentlich muss 'script2.py' für 13 Minuten laufen, aber die Sache ist, dass irgendwo in diesen 13 Minuten' script2.py' fehlschlägt und von Anfang an neu gestartet werden muss. Deshalb muss ich diesen Zustand erkennen und ihn von Anfang an ausführen, um Zeit zu sparen. –

+0

Das ist eine ganz andere Frage. Wenn Sie subprocess.check-call ausführen, wird das Skript ausgeführt, und es wird eine Ausnahme ausgelöst, wenn es einen Rückgabewert ungleich Null zurückgibt. Sie könnten das herausfinden und das Skript bei Bedarf erneut ausführen – bravosierra99

Verwandte Themen