subprocess :Ausgabetext "zurückbekommen"

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.
Antworten
drnicolas
User
Beiträge: 85
Registriert: Sonntag 24. Juli 2016, 10:32

Ich versuche mit subprocess ein externes Programm aufzurufen. Das funktioniert auch prima mit verschiedenen Methoden des subprocess Moduls.

Mit subprocess.check_output bekomme ich einen Fehler wenn die Rückgabe non-Zero ist.
Mit subprocess.call bekomme ich immerhin den Return-Wert, was schonmal prima ist, da dieser bestimmt was weiter gemacht werden muss.
Das Programm gibt aber noch einen text mit einem bestimmten Wert aus, den ich gerne hätte. Und daran scheitere ich .

Lt. Doku soll man dazu subrprocess.Popen nehmen und stdout=PIPE setzen.
Also so etwa:

Code: Alles auswählen

outp=subprocess.Popen(<Programm mit Args>, stdout=subprocess.PIPE)
print( outp.stdout.read())
Da kommt aber immer nur nix - Jedenfalls nicht mein Ausgabetext.
Was mache ich da falsch?

Übrigens soll Popen warten bis der Prozess fertig ist. Und den returncode hätte ich obendrein gerne
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

Versuch mal Popen.communicate.

Code: Alles auswählen

p = subprocess.Popen([command, arg, ..], stdout=subprocess.PIPE)
stdout, _ = p.communicate()
drnicolas
User
Beiträge: 85
Registriert: Sonntag 24. Juli 2016, 10:32

Leider nix.
hier mal der Code:

Code: Alles auswählen

test=subprocess.Popen(['identify', f], stdout=subprocess.PIPE)
stdout, _= test.communicate()
Was muss ich dann noch machen? stdout ist leer (wenn es denn eine Variable ist)
Sollte aber irgendeinen Text enthalten. Der Text wird mir zumindest in Pydev beim Debuggen angezeigt
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

Kann es sein das dein Programm nach stderr schreibt? Dann musst du auch das als PIPE angeben, und das ist der zweite, im Moment ignorierte Rueckgabewert von communicate().
drnicolas
User
Beiträge: 85
Registriert: Sonntag 24. Juli 2016, 10:32

Danke ! Das wars! Das Ding schreibt schlicht woanders hin.
Antworten