我试图从一个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)
最佳答案
您不需要调用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
。