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

subprocess.check_output调用ffprobe报CalledProcessError但错误为空,终端可正常运行

解决subprocess调用ffprobe返回非零退出码的问题

问题根源

终端执行命令时,csv="p=0"的引号是shell用来防止参数被拆分的语法,但用subprocess列表传参时,每个元素本身就是独立参数,不需要额外添加引号。你当前传入的csv="p=0"会被ffprobe当作完整的格式参数,它无法识别带引号的"p=0",因此触发错误退出。

修复代码

将参数中的'csv="p=0"'改为'csv=p=0'即可正常运行:

import subprocess

try:
    duration_output = subprocess.check_output(
        ['ffprobe', '-i', 'test.m4a', '-show_entries', 'format=duration', '-v', 'quiet', '-of', 'csv=p=0']
    )
    # 解码并去除多余空白字符
    print(duration_output.decode().strip())
except subprocess.CalledProcessError as err:
    print(f"退出码错误: {err.returncode}")

为什么错误详情是空字节串

因为你添加了-v quiet参数,ffprobe会关闭所有输出(包括错误信息),所以捕获到的错误输出为空。如果需要排查问题,可以临时移除-v quiet,或者在check_output中加入stderr=subprocess.STDOUT,让错误信息和标准输出合并返回:

import subprocess

try:
    output = subprocess.check_output(
        ['ffprobe', '-i', 'test.m4a', '-show_entries', 'format=duration', '-of', 'csv="p=0"'],
        stderr=subprocess.STDOUT
    )
except subprocess.CalledProcessError as err:
    # 打印具体错误信息
    print(err.output.decode())

此时你会看到ffprobe返回的具体错误提示,比如Invalid option value "csv=\"p=0\"",能快速定位参数问题。

内容的提问来源于stack exchange,提问作者Leonardo the Vinchi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 04:36:17