swift - task.arguments 中的 Swift 参数
问题描述
在 Swift 4 中,我尝试启动命令行来了解视频的帧速率。我使用媒体信息工具。
要执行的命令是(在终端测试)
"/Users/Lorenzo/mediainfo --Inform="Video;%FrameRate%" /Users/Lorenzo/Desktop/1.mov"
我为此目的的快速代码是:
let taskfindfps = Process()
taskfindfps.launchPath = "/Users/Lorenzo/mediainfo"
taskfindfps.arguments = ["--Inform=\"Video;%FrameRate%\"", myVideo]
let pipefindfps = Pipe()
taskfindfps.standardOutput = pipefindfps
但是第一个参数无效,我不知道为什么......我得到的结果就像没有可选参数的命令的结果:
"/Users/Lorenzo/mediainfo /Users/Lorenzo/Desktop/1.mov"
"--Inform=\"Video;%FrameRate%\""有什么问题吗?
解决方案
在不完全了解 Swift 的情况下,我会尝试不使用转义引号,例如在命令行上使用引号仅用于强制命令不将半列作为命令行处理(命令行在处理过程中将其删除。Process.arguments 是列表中,该语言应正确处理自身字符以进行转义,并且如果它转义引号(而不是像在命令行上那样处理它们)MediaInfo 将无法理解该命令。
Jérôme,MediaInfo 的开发人员。
推荐阅读
- c# - 删除实体:附加类型为“X”的实体失败,因为同一类型的另一个实体已经具有相同的主键值
- android - 从 For 循环调用异步 Web 服务
- perl - 如何不在文件中保存已解析的字符串
- python - 定义自定义 Op theano 的 grad
- java - ConcurrentModifcationException 偶尔发生
- javascript - Javascript通过类名将文本添加到div,不添加也没有错误
- rest - Netty websocket 和 Rest 在同一个 Java 应用程序中
- java - Maven xml构建失败
- c++ - 在猜谜游戏中不计尝试次数 C++
- scala - Spark:为什么 StructType 合并方法是私有的?