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