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
相关产品推荐
相关产品推荐

