Seite 1 von 2

Verfasst: Montag 10. November 2008, 15:56
von 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.

Verfasst: Donnerstag 13. November 2008, 14:20
von ivka_sto
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?

Verfasst: Donnerstag 13. November 2008, 16:50
von BlackJack
Nö. Nicht das ich wüsste.

Verfasst: Montag 17. November 2008, 15:51
von ivka_sto
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

Verfasst: Montag 17. November 2008, 16:28
von jens
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...

Verfasst: Montag 17. November 2008, 18:20
von BlackJack
Ansonsten kann man von aussen nicht allgemein und sicher sagen, ob ein Programm "hängt" oder noch normal arbeitet aber eben lange braucht.

Verfasst: Dienstag 18. November 2008, 13:44
von ivka_sto
@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

Verfasst: Dienstag 18. November 2008, 15:35
von Leonidas
``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.