我试图从一个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中最好像上面那样使用openwrite

10-08 05:04
查看更多