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

MPlayer unter Python ansteuern?

Beitragvon zacharias » 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

Beitragvon pythonist » 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

Beitragvon 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

Beitragvon zacharias » 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:

Beitragvon Rebecca » 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=]mplayer -slave -idle -input file=$HOME/.mplayer/pipe[/code]

Dann kann man die mplayer-Befehle einfach in die pipe reinschreiben:
[code=]echo "loadlist "$HOME"/.mplayer/playlist.txt" > $HOME/.mplayer/pipe
echo "pause" > $HOME/.mplayer/pipe
...[/code]
Ich benutze das, um mplayer ueber die Menues/Shortcuts meines Windowmanagers zu steuern. :)

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot], Dembrix, Google [Bot]