如何在Python中实时捕获mpg123的'k'/'m'命令输出?
终端控制mpg123
可通过终端控制mpg123:
$ mpg123 -C -q ~/Music/Oginsky\ -\ Gold\ Collection/05\ -\ Oginsky\ -\ Oginsky\ Polonaise\ Fmaj.mp3 # 输入's' Stopped. # 输入'm' MPEG 1.0 L III vbr 44100 j-s # 输入'k' [BOOKMARK] track 1 frame 97 # 输入's' $
Python半双工控制mpg123
也可通过Python实现mpg123的半双工控制:
import os import subprocess import time track = ('/home/vlz/Music/Oginsky - Gold Collection/' '05 - Oginsky - Oginsky Polonaise Fmaj.mp3') master, slave = os.openpty() p = subprocess.Popen(['mpg123', '-C', '-q', track], stdin=master) time.sleep(3) os.write(slave, b's') os.write(slave, b'm') time.sleep(3) os.write(slave, b'k') time.sleep(3) os.write(slave, b's') time.sleep(6) os.write(slave, b'q')
(代码修改自相关技术问答)
需求与问题
我希望同时捕获k、m命令的输出:
[m] 再次打印MPEG头信息 [k] 打印播放列表和曲目当前位置,供外部工具存储书签
尝试直接读取描述符0或使用input()均失败,推测是干扰了pty流程,导致上述脚本无法正常运行。我需要实时(命令发出后立即)获取mpg123的命令输出,在自制的简易Python MP3播放器中显示曲目剩余播放时间(依赖k命令)。
环境信息:
- Python 3.9.2
- Debian GNU/Linux 11 (bullseye)
内容的提问来源于stack exchange,提问作者Vladimir Zolotykh
相关产品推荐
相关产品推荐

