我试图从python程序控制mplayer的数量。 mplayer程序从bash脚本开始:
#!/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)
答案 0 :(得分:7)
您不需要调用os.system
并调用shell从Python脚本将该行写入FIFO - 您可以这样做:
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变量,你想要插入到你传递的字符串中,最简单的方法是使用字符串插值运算符(%
),就像我在上面的例子中所做的那样。
在您使用subprocess.call
的示例中,如果executable
是可执行的并且有shell
行,则不需要setvolume.sh
或#!
关键字参数 - 你可以这么做:
subprocess.call("/home/administrator/files/setvolume.sh")
但是,我认为最好在Python中使用open
和write
。