stdout und stderr mit PIPE in Konflikt zueinander?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
BlackJack

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.
ivka_sto
User
Beiträge: 63
Registriert: Dienstag 11. Dezember 2007, 23:13

Oh .. gerade das wollte ich nicht hören .. Gibt es da eingebaute Möglichkeiten zur Laufzeit mit dem Programm zu interagieren außer pexpect? Genauer gesagt, den StdOut zu lesen?
BlackJack

Nö. Nicht das ich wüsste.
ivka_sto
User
Beiträge: 63
Registriert: Dienstag 11. Dezember 2007, 23:13

Uund - ich bin's wieder! :lol:

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
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ich weiß nicht welches Programm du startes. Vielleicht ist es aber eins, welches eine Datei erzeugt. Dann könnte man in einem seperaten Thread die Dateigröße abfragen und wenn sie wächst, läuft das Programm noch...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
BlackJack

Ansonsten kann man von aussen nicht allgemein und sicher sagen, ob ein Programm "hängt" oder noch normal arbeitet aber eben lange braucht.
ivka_sto
User
Beiträge: 63
Registriert: Dienstag 11. Dezember 2007, 23:13

@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
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

``read()`` gibt nicht None zurück, wenn nichts zu lesen ist sondern blockiert solange bis der Wert da ist und gibt ihn dann zurück.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten