Seite 1 von 1

MPlayer unter Python ansteuern?

Verfasst: Samstag 2. Juni 2007, 00:44
von zacharias
Folgendes Problem: Ich möchte mir ein allersimpelstes graphisches Frontend für den MPlayer zum Abspielen von Audiodateien schreiben. Der läuft unter der Konsole. Beispielsweise pausiert der Player bei Drücken von " " (Leertaste), bei "q" beendet er, usw.

Ich suche nun nach einem Weg, um den Player nicht nur aufrufen, sondern ihm auch ,,Befehle'' geben zu können. Aber wie geht das?

Ich kann natürlich ein os.system(...) verwenden, aber das fruchtet nichts, da kann ich das Programm nur starten und beenden, etc. Meine zweite Idee war, os.popen zu verwenden. (Ich verwende ein Linux-System.)

Code: Alles auswählen

(xin,xout)=os.popen2("mplayer irgendwas.xyz")
xin.write("q")
Nur: Es tut nichts. Überhaupt nichts.

Irgendwer eine andere Idee?

Übrigens: Ich habe KEINE Möglichkeit, etwas Anderes außer dem Kommandozeilenprogramm zu verwenden. Sämtliche graphischen Frontends auf der betreffenden Plattform sind vollkommen unbrauchbar, ich habe auf der betreffenden Plattform keine alternativen Player der gleichen Funktionalität, ich habe keine Python-Bibliotheken, die das tun, was ich haben will. Mir bleibt wohl nichts anderes übrig, als das Programm direkt anzusteuern.

Verfasst: Samstag 2. Juni 2007, 01:30
von pythonist
Solltest dir mal subprocess anschaun, damit kannst du programme auch nebenbei laufen lassen und auf derern stdin schreiben.

Verfasst: Samstag 2. Juni 2007, 08:13
von BlackJack
Bei dem `os.popen2()` kann es zwei Probleme geben. Es kann sein, dass die Verbindung gepuffert ist, d.h. Du müsstest nach dem `write()` noch ein `flush()` absetzen, damit das 'q' auch wirklich rausgeschrieben wird. Das zweite ist die andere Richtung: Wenn `mplayer` etwas schreibt, dann landet das auch erstmal in einem Puffer. Wenn der voll ist, blockiert `mplayer` solange bis Du die Daten ausgelesen hast.

Edit: Dummen Fehler korrigiert. :-)

Verfasst: Samstag 2. Juni 2007, 12:03
von zacharias
Das mit dem Puffern kann nicht nur sein, das ist auch so; Linux puffert seine Pipes. Danke, das ist die Lösung, popen funktioniert.

muchas gracias

Verfasst: Montag 4. Juni 2007, 09:15
von Rebecca
Sehr praktisch am mplayer ist auch, dass man ihn ueber named pipes (fifos) fernsteuern kann. Hat man eine pipe angelegt, kann man mplayer wie folgt starten:

Code: Alles auswählen

mplayer -slave -idle -input file=$HOME/.mplayer/pipe
Dann kann man die mplayer-Befehle einfach in die pipe reinschreiben:

Code: Alles auswählen

echo "loadlist "$HOME"/.mplayer/playlist.txt" > $HOME/.mplayer/pipe
echo "pause" > $HOME/.mplayer/pipe
...
Ich benutze das, um mplayer ueber die Menues/Shortcuts meines Windowmanagers zu steuern. :)