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

InformationsquelleAutor Jeff Fry | 2011-06-05
Schreibe einen Kommentar