命令swift后获取终端输出
发布时间:2020-12-14 05:33:36 所属栏目:百科 来源:网络整理
导读:我使用以下代码在终端中运行一些命令: system("the command here") 在我想知道运行此命令的结果后,例如如果我跑 system("git status") 我想阅读有关我的回购变更的实际信息.有没有办法在swift中做到这一点? NSTask是将另一个程序作为子进程运行的类.您可以
我使用以下代码在终端中运行一些命令:
system("the command here") 在我想知道运行此命令的结果后,例如如果我跑 system("git status") 我想阅读有关我的回购变更的实际信息.有没有办法在swift中做到这一点?
NSTask是将另一个程序作为子进程运行的类.您可以
捕获程序的输出,错误输出,退出状态等等. 扩展我对xcode 6 swift system() command的回答, func runCommand(cmd : String,args : String...) -> (output: [String],error: [String],exitCode: Int32) { var output : [String] = [] var error : [String] = [] let task = NSTask() task.launchPath = cmd task.arguments = args let outpipe = NSPipe() task.standardOutput = outpipe let errpipe = NSPipe() task.standardError = errpipe task.launch() let outdata = outpipe.fileHandleForReading.readDataToEndOfFile() if var string = String.fromCString(UnsafePointer(outdata.bytes)) { string = string.stringByTrimmingCharactersInSet(NSCharacterSet.newlineCharacterSet()) output = string.componentsSeparatedByString("n") } let errdata = errpipe.fileHandleForReading.readDataToEndOfFile() if var string = String.fromCString(UnsafePointer(errdata.bytes)) { string = string.stringByTrimmingCharactersInSet(NSCharacterSet.newlineCharacterSet()) error = string.componentsSeparatedByString("n") } task.waitUntilExit() let status = task.terminationStatus return (output,error,status) } 样品用法: let (output,status) = runCommand("/usr/bin/git",args: "status") print("program exited with status (status)") if output.count > 0 { print("program output:") print(output) } if error.count > 0 { print("error output:") print(error) } 或者,如果您只对输出感兴趣,而不是对输出感兴趣 let output = runCommand("/usr/bin/git",args: "status").output 输出和错误输出作为字符串数组返回,一个 runCommand()的第一个参数必须是a的完整路径 let (output,status) = runCommand("/bin/sh",args: "-c","git status") 优点是自动找到“git”可执行文件 Swift 3的更新: func runCommand(cmd : String,exitCode: Int32) { var output : [String] = [] var error : [String] = [] let task = Process() task.launchPath = cmd task.arguments = args let outpipe = Pipe() task.standardOutput = outpipe let errpipe = Pipe() task.standardError = errpipe task.launch() let outdata = outpipe.fileHandleForReading.readDataToEndOfFile() if var string = String(data: outdata,encoding: .utf8) { string = string.trimmingCharacters(in: .newlines) output = string.components(separatedBy: "n") } let errdata = errpipe.fileHandleForReading.readDataToEndOfFile() if var string = String(data: errdata,encoding: .utf8) { string = string.trimmingCharacters(in: .newlines) error = string.components(separatedBy: "n") } task.waitUntilExit() let status = task.terminationStatus return (output,status) } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |