2011-01-19 74 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 

然後我用Python寫的一個GUI,應該是能夠控制正在播放的mplayer的實例的量。我已經嘗試了以下內容:

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並調用外殼編寫一行到FIFO從你的Python腳本 - 你可以這樣做:

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

這不是我清楚你希望在你原來的蟒蛇發生什麼,雖然 - 在環境musicvol集?如果相反,它是一個Python變量,您想要插入到正在傳遞的字符串中,最簡單的方法是使用字符串插值運算符(%),正如我在上面的示例中所做的那樣。

在你使用subprocess.call你不需要executableshell關鍵字參數如果setvolume.sh是可執行文件,具有#!線的例子 - 你可能只是這樣做:

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

然而,最好只使用我想,Python中的openwrite

+0

非常感謝Mark !.這解決了它(使用你推薦的選擇)。 – Julio 2011-01-19 13:21:41