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

Pipe参数自动添加额外引号致命令执行失败的排查求助

问题解决:Process调用ffprobe参数传递错误

核心问题

你错误地将ffprobe的所有命令行参数打包成单个字符串传入arguments数组,但Process的arguments要求每个命令行选项、选项值、路径都必须是数组的独立元素——终端里的引号是给shell解析用的,Process不需要这些额外引号。

错误原因分析

终端执行命令时,shell会自动把引号内的内容识别为单个参数,拆分出-v、error等独立项;但你直接把整串参数作为一个数组元素传给Process时,ffprobe会把这一整串当成-v选项的参数,导致报错"Missing argument for option...",末尾的引号其实是ffprobe错误信息里自动添加的格式化内容,并非你传入的。

正确调用方式

把每个参数拆分为数组的独立元素,不需要给带空格的路径加引号:

// 示例调用
let ffprobePath = "/Users/dirk/Library/Developer/Xcode/DerivedData/DSPhotoStructureCleaner-awiixodrflmeajgbqdlklycdiewu/Build/Products/Debug/ffprobe"
let arguments = [
    "-v", "error",
    "-select_streams", "v:0",
    "-show_entries", "stream=codec_name",
    "-of", "default=noprint_wrappers=1:nokey=1",
    "/Users/Shared/MeinDesktop/_Import Fotos/Test/_ORG/IMG_356308_2024.02.11-20.11.07_EOS5D4.MOV"
]
let output = shell(launchPath: ffprobePath, arguments: arguments)
print(output) // 会输出 mjpeg

补充说明

Process直接与目标进程交互,绕过了shell的参数解析步骤,因此:

  • 不需要用引号包裹带空格的路径,每个参数作为数组元素即可避免拆分
  • 必须将命令行的每个选项(如-v)和对应的取值(如error)拆分为独立的数组元素,不能合并成一个字符串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 04:52:47