【问题标题】:Write to a FIFO from a Python program从 Python 程序写入 FIFO
【发布时间】:2011-01-19 10:16:51
【问题描述】:

我试图通过 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)

【问题讨论】:

    标签: python bash pipe fifo


    【解决方案1】:

    您无需调用 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 的示例中,如果setvolume.sh 是可执行的并且具有#! 行,则不需要executableshell 关键字参数-您可以这样做:

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

    但是,我认为最好在 Python 中使用 openwrite

    【讨论】:

    • 非常感谢马克!解决了它(使用您推荐的替代方法)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    相关资源
    最近更新 更多