Abrufen der Ausgabe von einem python-subprocess
Ich versuche zu erfassen, die Ausgabe hier. Wenn an der python-Eingabeaufforderung, die ich laufen
p = subprocess.Popen(["/path/to/search_by_hash.par", hash_str],
stdout=subprocess.PIPE)
Den return-Wert (eine Liste) schreibt auf die Standardausgabe, aber nicht erfasst
[4460475, 4406612, 4379510]
Habe ich versucht, folgenden Sie es mit
value = p.communicate()[0]
value
..aber der Wert ist eine leere Zeichenfolge, nicht die Liste von Ganzzahlen, die ich erwarte, und was gedruckt wird auf stdout
Experimentierte ich mit den Lösungen von Speichern der Ausgabe des unterprozesses.Popen-Aufruf in einen string aber nicht in der Lage zu erfassen Sie die Ausgabe.
UPDATE:
stderr scheint nicht die Ausbeute etwas...und die Liste ich bin auf der Suche nach ist gedruckt aus...nur nicht mit etwas Glück in die Erfassung. Siehe unten:
>>> p = subprocess.Popen(["/home/jfry/tools/search_by_hash.par", hash_str],
stdout=subprocess.PIPE)
>>>
[4460475, 4406612, 4379510]
value, err = p.communicate()
>>> value
''
>>> err
Dank!
- Versuchen
value = p.communicate()[0]
- Sind Sie versucht, erfassen die Daten, die gesendet werden, um den Teilprozess stdout, oder sind Sie versucht, den Teilprozess der exit-status?
- Jakob - danke, das war ein Tippfehler in meiner Frage, aber nicht in die Eingabeaufforderung. Ich habe mich verändert die Frage.
- Adam - ich möchte den Rückgabewert, in diesem Fall eine Liste mit int-Werten, z.B. [4460475, 4406612, 4379510]
- hinzufügen
stderr=subprocess.PIPE
, wie Sie bereits für stdout - Die Antworten, die hier beschrieben wird, sollte funktionieren. Was bedeutet der Teilprozess tun? Könnte es sein, Schließung und Wiedereröffnung stdout? Können Sie erfassen Ihre Ausgabe, indem Sie es aus einer Hülle und umleiten der Ausgabe, d.h.
/home/jfry/tools/search_by_hash.par hash >out 2>err
? - mita-Sie Hinzugefügt das fehlende Stück, danke! Jetzt kann ich capture stderr, und sehen, was Los ist.
- der Titel fixiert werden soll (
s/return value/output/
) um Verwirrung zu vermeiden..
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, die Kontrolle
stderr
mitp.communicate()[1]
.stderr
, `p.kommunizieren()[1] für einige Ahnung haben, was Los ist.Weil die akzeptierte Antwort löst nicht das Problem (zumindest für mich):
Zur Erfassung der
stderr
-Ausgang, sollte Folgendes getan werden:Entscheidend ist der parameter
stderr=subprocess.PIPE
ohne diesen parameter wird diestderr
-Ausgang wird nicht erfasst und dieerr
wirdNone
.Wenn Sie daran interessiert sind nur in den
stderr
-Ausgabe, die Sie tatsächlich verwenden können:In diesem Fall
p.communicate()[0]
istNone
.kommunizieren, ist eine Methode. So sollte man es nennen!