Seite 1 von 1
Wie fange ich mein Stderr ab (Kurze Frage?)
Verfasst: Mittwoch 21. Oktober 2009, 13:18
von Bluekobalt
Hallo,
ich möchte mit folgendem Code den stderr als String abgreifen, weiß aber nicht wie ich daran komme:
Code: Alles auswählen
import subprocess
prog= subprocess.call(['cmd.exe','dir'],stderr=subprocess.STDOUT)
da bekomme ich dann als Antwort, dass das Filehandle ungültig ist.
nehme ich
bekommeich nur ein INT als Wert, was mir auch nicht hilft...
ich kann nicht popen benutzen, weil es wichtig ist, dass mein indiziertes.Programm abgeschlossen ist bevor es weitergeht...
Verfasst: Mittwoch 21. Oktober 2009, 13:57
von str1442
Code: Alles auswählen
In [7]: a = subprocess.Popen("sleep 5 && echo Output", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
In [8]: a.wait()
Out[8]: 0
In [9]: a.communicate()
Out[9]: ('Output\n', None)
Alternativ könnte man stderr auch ein dateiähnliches Objekt übergeben. Allerdings greift subprocess auf die fileno() Methode (Liefert den Dateideskriptor, gibt sicherlich keine einfache Methode sowas zu emulieren) zu, weswegen es mit zb einem StringIO Objekt nicht funktioniert.
Verfasst: Mittwoch 21. Oktober 2009, 14:54
von Bluekobalt
Also erstmal vielen Dank für Deine Hilfe, dass Thema scheint ja schwieriger zu sein als ich erst dachte
Mein problem jetzt:
Code: Alles auswählen
self.proc = subprocess.Popen( args, "sleep 5 && echo Output", stdout=subprocess.PIPE, stderr=subprocess.PIPE)
self.proc.wait()
self.proc.communicate()
so funzt es nicht, weil er bufsize kein INT ist

Verfasst: Mittwoch 21. Oktober 2009, 15:27
von Mad-Marty
"Errorcode als String" :
Seh dir die Hilfe zu subprocess an:
http://docs.python.org/library/subprocess.html
(und ganz besonders die parameter von Popen)
Popen.returncode¶
The child return code, set by poll() and wait() (and indirectly by communicate()). A None value indicates that the process hasn’t terminated yet.
Den int zu einem string konvertieren und fertig.
Der Errorcode hat nichts mit STDERR zu tun.
Und wie du die STDOUT und STDERR Channels liest wurde dir ja oben schon gezeigt.
Verfasst: Mittwoch 21. Oktober 2009, 15:37
von Bluekobalt
hilft mir leider überhaupt nicht !
das manuel habe ich schon gelesen, hat mich auch nicht weiter gebracht.
das mit dem ERRCODE war falsch, der Rest von deinem Kommentar nur Klugscheisserei
Verfasst: Mittwoch 21. Oktober 2009, 15:40
von Hyperion
Bluekobalt hat geschrieben:hilft mir leider überhaupt nicht !
Dein Quellcode auch nicht!
Außer, dass Du den Aufruf von Popen nicht wirklich kapiert hast:
Ist hier wenig sinnvoll...
Verfasst: Mittwoch 21. Oktober 2009, 15:46
von Bluekobalt
der war auch nicht von mir ("sleep 5 && echo Output")
Verfasst: Mittwoch 21. Oktober 2009, 16:56
von fhoech
Hyperion sagte, dass in Deinem Code das "sleep 5 && echo Output" an der Stelle, an der Du es stehen hast, keinen Sinn macht . Und recht hat er

(btw, str1442 hat es in seinem Beitrag durchaus an der richtigen Stelle stehen, allerdings war es von ihm nur als Beispiel gedacht.)
(Bluekobalt)
Code: Alles auswählen
self.proc = subprocess.Popen( args, "sleep 5 && echo Output", stdout=subprocess.PIPE, stderr=subprocess.PIPE)
self.proc.wait()
self.proc.communicate()
so funzt es nicht, weil er bufsize kein INT ist
(Bluekobalt)
(Mad-Marty)
Den int zu einem string konvertieren und fertig.
Der Errorcode hat nichts mit STDERR zu tun.
Und wie du die STDOUT und STDERR Channels liest wurde dir ja oben schon gezeigt.
das mit dem ERRCODE war falsch, der Rest von deinem Kommentar nur Klugscheisserei
Ich finde es etwas ungut (um es mal vorsichtig auszudrücken), dass Du Mad-Marty Deinen (!) obigen Fehler ankreidest, und ihn auch noch der "Klugscheisserei" bezichtigst, obwohl er Dir nur die korrekte Lösung Deines Problems geschrieben hat.
Ich bitte um Entschuldigung Mad-Marty
Verfasst: Donnerstag 22. Oktober 2009, 08:13
von Bluekobalt
Für meine schroffen Art gestern, ich war tatsächlich total angepisst, weil ich das gestern ums verrecken nichts gebacken bekommen habe. Das ist natürlich keine Entschuldigung für mein Verhalten, aber vielleicht eine Erklärung.
So und jetzt noch vielen Dank für eure Hilfe, ich setze mich gleich wieder ran und probiere es aus.[/b]