stdout und stderr mit PIPE in Konflikt zueinander?
Beendet sich denn 'pro2002' irgendwann? Wenn nein: `read()` wartet solange bis alle Ausgaben von dem externen Programm gelesen sind und das Programm sein `stdout` schliesst.
Uund - ich bin's wieder!
Bevor ich die Hälfte meines Codes in den Müll schmeiße, noch eine Frage an BlackJack: Lohnt es sich, daß ich mir das Thema 'Threads' anschaue? Ich denke, das Programm würde immer noch sein StdOut bis zum Beenden puffern, aber gibt es möglicherweise unter den Thread-Funktionen etwas, anhand dessen ich kontrollieren könnte, ob das Unterprogramm leise weiterarbeitet und nicht festgefahren ist? Mit Threads kenne ich mich gar nicht aus, und wollte fragen ob es überhaupt Sinn macht, bevor ich mir tonnenweise Doku- und Forumeinträge durchlese.
Vielen Dank für die Antworten bis jetzt, haben mir die Funktionsweise von subprocess noch mal etwas deutlicher gemacht.
Viele Grüße,
ivka_sto
Bevor ich die Hälfte meines Codes in den Müll schmeiße, noch eine Frage an BlackJack: Lohnt es sich, daß ich mir das Thema 'Threads' anschaue? Ich denke, das Programm würde immer noch sein StdOut bis zum Beenden puffern, aber gibt es möglicherweise unter den Thread-Funktionen etwas, anhand dessen ich kontrollieren könnte, ob das Unterprogramm leise weiterarbeitet und nicht festgefahren ist? Mit Threads kenne ich mich gar nicht aus, und wollte fragen ob es überhaupt Sinn macht, bevor ich mir tonnenweise Doku- und Forumeinträge durchlese.
Vielen Dank für die Antworten bis jetzt, haben mir die Funktionsweise von subprocess noch mal etwas deutlicher gemacht.
Viele Grüße,
ivka_sto
Ansonsten kann man von aussen nicht allgemein und sicher sagen, ob ein Programm "hängt" oder noch normal arbeitet aber eben lange braucht.
@jens: Ist ne super Idee, danke
Und andererseits, hatte ich mir diesbezüglich überlegt, daß man möglicherweise auch über stderr nachvollziehen könnte, ob das Unterprogramm gestartet hat (und nicht wie oben, ob es läuft). Es müßte der pro.stderr.read() None sein, solange das Programm startet (z.B. wenn's länger dauert), und wird zu ''/'ErrorCode' wenn es fehlerfrei/mit nem Fehler gestartet hat, oder? Also in der kurzen Zeit zwischen dem pro = subprocess.Popen(cmd, ... ) und der Ausgabe eines Fehlers, wenn das Unterprogramm nicht gestartet werden kann, ist der stderr.read() = None, oder? Versteh ich das richtig?
VG,
ivka_sto
Und andererseits, hatte ich mir diesbezüglich überlegt, daß man möglicherweise auch über stderr nachvollziehen könnte, ob das Unterprogramm gestartet hat (und nicht wie oben, ob es läuft). Es müßte der pro.stderr.read() None sein, solange das Programm startet (z.B. wenn's länger dauert), und wird zu ''/'ErrorCode' wenn es fehlerfrei/mit nem Fehler gestartet hat, oder? Also in der kurzen Zeit zwischen dem pro = subprocess.Popen(cmd, ... ) und der Ausgabe eines Fehlers, wenn das Unterprogramm nicht gestartet werden kann, ist der stderr.read() = None, oder? Versteh ich das richtig?
VG,
ivka_sto