2011-01-19 28 views
3

私はPythonプログラムからmplayerのボリュームを制御しようとしています。 mplayerのプログラムはbashスクリプトから開始される:PythonプログラムからFIFOに書き込む

#!/bin/bash 
mkfifo /home/administrator/files/mplayer-control.pipe 
/usr/bin/mplayer -slave -input file=/home/administrator/files/mplayer-control.pipe /home/administrator/music/file.mp3 

それから私は再生されているのmplayerのインスタンスの音量をコントロールすることができるようになっているPythonで書かれたGUIを持っています。私は、次のことを試してみました:

os.system('echo "set_property volume $musicvol" > /home/administrator/files/mplayer-control.pipe') 

私が代わりに数値での$ musicvolを置き換える場合は動作しますが、それは残念ながら役に立たないのであること。私は変数を渡すことができる必要があります。

私はまた、Pythonアプリケーションからbashスクリプトを呼び出すことによってそれを解決することができるだろうが、私はそれはどちらか動作させることはできません。

subprocess.call("/home/administrator/files/setvolume.sh", executable="bash", shell=True) 

答えて

7

あなたはos.systemを呼び出して起動する必要はありません。あなたのPythonからFIFOにその行を書き込むためのシェルはあなただけで行うことができますscript-:

new_volume = 50 
with open("/home/administrator/files/mplayer-control.pipe","w") as fp: 
    fp.write("set_property volume %d\n" % (new_volume,)) 

それはあなたがあなたの元pythonで起こることを期待するもの私にははっきりしていない、しかし - 環境におけるmusicvolセットがありますか?代わりに渡している文字列に挿入するPython変数の場合は、上記の例のように文字列補間演算子(%)を使用するのが最も簡単な方法です。 setvolume.shが実行可能であると#!ラインを持っている場合は、executableshellキーワード引数を必要としないsubprocess.callを使用してあなたの例では

- あなただけ行うことができます:

subprocess.call("/home/administrator/files/setvolume.sh") 

はしかし、それだけで使用することをお勧めします上記のようにPythonでopenwriteがあると思います。

+0

ありがとうございました。マーク!それはそれを解決しました。 – Julio

関連する問題