在Python中通过子进程暂停mpg123

时间:2017-03-18 17:11:22

标签: python subprocess stdin

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

我打开了这样的子流程:

player.stdin.write("s")

然而,当我尝试用

暂停mpg123时
{{1}}

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

---> Screenshot

3 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

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')

答案 2 :(得分:0)

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