【问题标题】:Pausing mpg123 through subprocess in Python通过 Python 中的子进程暂停 mpg123
【发布时间】:2017-08-10 04:23:40
【问题描述】:

我的问题是我想在后台运行 mpg123 并播放/暂停一个 mp3 文件。

我这样打开子进程:

player = subprocess.Popen(["mpg123", "alarm.mp3", "-C"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)

但是,当我尝试用

暂停 mpg123
player.stdin.write("s")

它只返回一个基于字符串长度的数字(在这种情况下:1)

---> Screenshot

【问题讨论】:

    标签: python subprocess stdin


    【解决方案1】:

    发现问题了!显然,您必须在每次输入后刷新标准输入。 工作代码(请注意,我切换到 mplayer,因为使用 mpg123 无法正常工作):

    player = subprocess.Popen(["mplayer", "/music.mp3"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
    time.sleep(10)
    player.stdin.write("pause")
    player.stdin.flush()
    

    【讨论】:

      【解决方案2】:

      mpg123 需要类似终端的标准输入,PIPE 不起作用。试一试:

      import os
      import pty
      import subprocess
      import time
      
      master, slave = os.openpty()
      
      p = subprocess.Popen(['mpg123', '-C', 'music.mp3'], stdin=master)
      time.sleep(3)
      os.write(slave, 's')
      time.sleep(3)
      os.write(slave, 's')
      time.sleep(6)
      os.write(slave, 'q')
      

      【讨论】:

        【解决方案3】:

        mpg123 需要类似终端的标准输入;作为对徐雄的赞美。我确实得到了一个 TypeError “需要一个类似字节的对象,而不是 str”。 这可以通过类型转换为字节来解决: os.write(slave, b's') .. 测试并为我工作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-12-22
          • 1970-01-01
          • 1970-01-01
          • 2017-08-20
          • 1970-01-01
          • 1970-01-01
          • 2022-11-18
          • 2021-03-17
          相关资源
          最近更新 更多