几周前我在这里问了一个与此相关的问题: Python, mpg123 and subprocess not proper using stdin.write or communication
感谢那里的帮助,我能够做我当时需要的事情。(没有调用 q,但终止了子进程以停止它)。## Heading ## 现在虽然我似乎又有点乱了。
from subprocess import Popen, PIPE, STDOUT
p = Popen(["mpg123", "-C", "test.mp3"], stdout=PIPE, stdin=PIPE, stderr=STDOUT)
#wait a few seconds to enter this, "q" without a newline is how the controls for the player work to quit out if it were ran like "mpg123 -C test.mp3" on the command line
p.communicate(input='q')[0]
就像以前一样,我需要这个能够退出 mpg123,就像它的标准控件一样(比如按“q”退出,或“-”降低音量,“+”提高音量等),现在我使用上面的代码,理论上应该可以工作,并且可以与类似的程序一起工作。有谁知道我可以使用子进程使用 mpg123 内置的控件(通过使用“mpg123 -C 不管.mp3”访问的控件)的一种方式?终止已经不够了,因为我需要控件^_^
编辑:非常感谢 abarnert 的惊人答案 =) 好的,所以新代码只是 abarnert 答案的略微修改版本,但是 mpg123 似乎不接受命令
import os
import pty
import sys
import time
pid, fd = os.forkpty()
if pid:
time.sleep(5)
os.write(fd, 'b') #this should've restarted the file
time.sleep(5)
os.write(fd, 'q') #unfortunately doesn't quit here =(
time.sleep(5) # quits after this is finished executing
else:
os.spawnl(os.P_WAIT, '/usr/bin/mpg123', '-C', 'TEST file.mp3')