[Swift 3] 如何使用 Process 调用外部命令?

2016-10-17 15:14:14 +08:00
 Shared

之前做了使用 mpv 播放器播放 Acfun 视频的 acmpv,不过每次还需要复制网址再粘贴到终端调用相关命令,于是就想直接监控剪贴板,如果复制的是 Acfun 网址就直接调用 acmpv 播放。

想好了就动手,监控剪贴板这块儿很快搞定,问题出在使用 Process (原 NSTask )调用外部命令上。

先上代码(全部代码在 GitHub):

let process = Process()

let outpipe = Pipe()
process.standardOutput = outpipe
let errpipe = Pipe()
process.standardError = errpipe

process.launchPath = "/usr/local/bin/acmpv"
process.arguments = ["-f=mp4", copiedString]
process.launch()

let outdata = outpipe.fileHandleForReading.availableData
let outputString = String(data: outdata, encoding: String.Encoding.utf8) ?? ""
NSLog("Ouput: %@", outputString)

let errdata = errpipe.fileHandleForReading.availableData
let errString = String(data: errdata, encoding: String.Encoding.utf8) ?? ""
NSLog("Err: %@", errString)

process.waitUntilExit()

执行后并没有 mpv 弹出,而是在 console 输出:

warning: the gestalt selector gestaltsystemversion is returning 10.9.0 instead
of 10.12.0...

在 Google 上搜索半天没有一条有用的,所以作为一个 Swift + Cocoa 新手,我就卡到这儿了……

请教下各位高手,如何才能正确调用外部命令?

5506 次点击
所在节点    Swift
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/313319

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX