2d23d hat geschrieben:ich habe immer noch Probleme, die Ausgabe des Prozesses irgendwie einzufangen.
Hallo Philipp!
Kannst du dich noch erinnern? Das war deine Aufgabenstellung:
2d23d hat geschrieben:und zwar habe ich eine Anwendung mit GUI (GTK & pygtk) unter Windows, die eigentlich wunderbar funktioniert. Jetzt habe ich meine Fehlermeldungen alle aus der Console in die GUI umgeleitet und würde gerne das Consolenfenster loswerden.
Es gibt jetzt eine Lösung, die sofort nach dem Start deiner Anwendung prüft, ob sie von pythonw.exe oder von python.exe aufgerufen wurde. Wenn sie von pythonw.exe aufgerufen wurde, dann wird ein **komplett neuer** Prozess erstellt, der mit dem laufenden Prozess *nichts* zu tun hat. Danach wird der eigene, laufende Prozess beendet.
Der neue, soeben gestartete Prozess, prüft natürlich wieder, ob er von python.exe oder von pythonw.exe aufgerufen wurde. Da dieser aber von python.exe aufgerufen wurde, wird mit dem Programm ganz normal weiter gefahren.
Du musst dich also nicht in der Funktion ``redirect_pyw()`` mit der Ausgabe beschäftigen. Da wirst du nichts finden.
Im Beispiel wird in der Funktion ``main()`` mit ``subprocess.Popen`` das Programm plink.exe aufgerufen. Und dort -- nur dort -- wirst du mit der Rückgabe von plink.exe etwas anfangen können.
Du hast nicht geschrieben, dass du dein Programm aufrufen möchtest und von diesem Programm eine Rückgabe brauchst. Du hast geschrieben, dass du Fehlermeldungen nicht mehr in der Konsole anzeigen möchtest. Du brauchst keine Konsole mehr, da alles in die GUI geloggt wird. Wozu brauchst du dann noch eine Rückgabe? Und ich gehe davon aus, dass du den hier gezeigten Trick in dein GUI-Programm einbaust und nicht irgendwo anders.
Was anderes macht ja keinen Sinn, denn von deinem GUI-Programm aus kannst du ja jedes andere Programm mit ``subprocess.Popen`` starten, ohne dass eine neue Konsole auf geht.
Wenn du vom GUI-Programm etwas loggen möchtest, dann schreibe in eine Datei. Aber bitte nicht so umständlich wie in deinem Beispiel. Lies lieber das hier vorher einmal durch:
http://www.python-forum.de/topic-6157.html
mfg
Gerold
PS: Lange Codezeilen solltest du evt. bei 80 Zeichen umbrechen. Das macht die Sache für alle einfacher.