You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 09:12:44