3

我试图从 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)
4

1 回答 1

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不需要executableorshell关键字参数- 您可以这样做:setvolume.sh#!

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

但是,我认为最好只在 Python 中使用open和。write

于 2011-01-19T11:13:19.347 回答