MPlayer unter Python ansteuern?

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
zacharias
User
Beiträge: 11
Registriert: Samstag 2. Juni 2007, 00:36

Samstag 2. Juni 2007, 00:44

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.
pythonist
User
Beiträge: 40
Registriert: Sonntag 14. Mai 2006, 17:28

Samstag 2. Juni 2007, 01:30

Solltest dir mal subprocess anschaun, damit kannst du programme auch nebenbei laufen lassen und auf derern stdin schreiben.
BlackJack

Samstag 2. Juni 2007, 08:13

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. :-)
Zuletzt geändert von BlackJack am Samstag 2. Juni 2007, 12:35, insgesamt 1-mal geändert.
zacharias
User
Beiträge: 11
Registriert: Samstag 2. Juni 2007, 00:36

Samstag 2. Juni 2007, 12:03

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
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Montag 4. Juni 2007, 09:15

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. :)
Antworten