stdout in variable mit subprocess

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
ThaOverlord
User
Beiträge: 2
Registriert: Montag 16. November 2009, 16:03

Hallo alle zusammen,

ich bin dabei ein kleines Bashscript, dass ich mal geschrieben habe nach Python zu konvertieren. Dazu muss man sagen, ich habe mit Python gerade erst angefangen.
Das Script transcodiert/rippt Videos nach h264 in mkv Container.
Ich steuere eigentlich nur mplayer/mencoder entsprechend an.

Mein Problem ist die Ausgabe dieser Programme vernünftig weiter zu verarbeiten. Konkret geht es im Moment um Folgendes:
ich benutze "midentify" um verschiedene Parameter des Video-Streams auszulesen, die Ausgabe dieses Programms sieht wie folgt aus

Code: Alles auswählen

ID_VIDEO=...
ID_AUDIO=...
.
.
.
ID_EXIT=EOF
In Bash habe ich einfach nach den relevanten Parametern ge"grept" und fertig.
Mit Python ist das aber nicht so einfach. Ich würde gerne die Ausgabe des Programms erstmal einlesen um sie dann mit regexp weiterzuverarbeiten, allerdings bekomme ich bis jetzt immer nur die letze Zeile (ID_EXIT=EOF) zurück, was mir garnichts nützt.
zunächst habe hab ich es wie folgt versucht:

Code: Alles auswählen

    output = subprocess.Popen(["midentify", rippath], stdout=subprocess.PIPE).communicate()[0]
Habe dann aber gelernt das communicate wartet bis das Programm beendet ist, was evtl. die Ausgabe nur der letzen Zeile erklärt, und es so weiter versucht.

Code: Alles auswählen

OUTPUT=[]
identify = subprocess.Popen(["midentify",  rippath], stdout=subprocess.PIPE)
i_output=identify.stdout.readline()
if i_output:
    OUTPUT.append(i_output)
Ergebnis ist aber das Gleiche. Wenn ich Popen mit shell=True aufrufe bekomme ich nur die erste Zeile, wie das zu erklären ist, ist mir noch nicht ganz klar.
Hätte nicht gedacht, dass es in Python so kompliziert sein kann die Ausgabe eines Programmes abzufangen, aber vielleicht kann mir ja jemand helfen.
Vielen Dank schonmal!
ThaOverlord
User
Beiträge: 2
Registriert: Montag 16. November 2009, 16:03

Ok hat sich erledigt ein "s" war die Lösung

readlines sollte es heißen nicht readline

Ach Anfängerfehler :evil:
Antworten