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

Beitragvon BlackJack » Montag 10. November 2008, 15:56

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

Beitragvon ivka_sto » Donnerstag 13. November 2008, 14:20

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

Beitragvon BlackJack » Donnerstag 13. November 2008, 16:50

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

Beitragvon ivka_sto » Montag 17. November 2008, 15:51

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
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Montag 17. November 2008, 16:28

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...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
BlackJack

Beitragvon BlackJack » Montag 17. November 2008, 18:20

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

Beitragvon ivka_sto » Dienstag 18. November 2008, 13:44

@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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 18. November 2008, 15:35

``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 Modvoice

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]