You need to enable JavaScript to run this app. Python调用ffprobe时如何正确传递带空格的文件名参数
优惠活动
大模型
产品
解决方案
定价
更多

Python调用ffprobe时如何正确传递带空格的文件名参数

问题解决方法

错误原因

  • 你使用的str.split()只会粗暴按所有空白字符切割命令字符串,不会识别你手动添加的单/双引号边界,导致带空格的文件路径被拆分为多个独立参数,传给ffprobe后无法识别为完整路径
  • 手动给文件路径套额外单引号的操作是多余的,subprocess传参时不需要手动做转义处理

推荐解决方案(安全、无兼容问题)

直接构建命令参数列表传给subprocess.run,不需要拼接字符串后拆分,每个参数作为列表的独立元素,subprocess会自动处理参数内的特殊字符(包括空格):

import subprocess


def scrape(file):
    scrape_cmd = [
        "ffprobe",
        "-print_format", "json",
        "-show_streams",
        "-show_format",
        "-loglevel", "quiet",
        "-hide_banner",
        file
    ]
    result = subprocess.run(scrape_cmd, capture_output=True)
    print(result)


# 直接传入原始路径即可,不需要加额外引号
scrape(file="/home/mike/Desktop/2 Stars at Night.mp4")

补充方案(不推荐,仅作参考)

如果一定要用字符串形式的完整命令,可以开启shell=True参数,这种方式存在命令注入风险,仅适合文件路径完全可信的场景:

import subprocess


def scrape(file):
    # 路径外侧加引号做转义
    scrape_cmd = f'ffprobe -print_format json -show_streams -show_format -loglevel quiet -hide_banner "{file}"'
    result = subprocess.run(scrape_cmd, shell=True, capture_output=True)
    print(result)


scrape(file="/home/mike/Desktop/2 Stars at Night.mp4")

内容的提问来源于stack exchange,提问作者user14389292

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 02:24:03