如何在 Swift 3.0 中使用 Process 调用外部命令?

在做个监控剪贴板的程序,如果复制的是需求网址就直接调用外部命令执行。想好了就动手,监控剪贴板这块儿很快搞定,问题出在使用 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()

运行后并没有执行命令,而是在 console 输出:

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

在 Google 上搜索半天没有一条有用的。请问如何正确的在 Swift 中调用外部命令?

回复
阅读 4.8k
1 个回答
新手上路,请多包涵

func execShellScript(path:String,mode:String,script:String)->String{

let task = Process()

task.launchPath = path

task.arguments = [mode,script]

let pipe = Pipe()

task.standardOutput = pipe

//task.standardError=pipe

task.launch()

let data = pipe.fileHandleForReading.readDataToEndOfFile()

let output: String = String(data: data, encoding: String.Encoding.utf8)!

return output

}

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏