在我的项目中,我计划使用终端命令来获取一些数据。为此,我找到了一些代码并创建了一个函数。如果我调用这个函数一次,没有任何问题。效果很好。但是如果我连续调用这些函数 2 次或 3 次,它有时工作得很好,有时效果不佳。
func RunCommand(cmd : String, args : String...) -> (output: [String], error: [String], exitCode: Int32) {
let task = NSTask()
var output : [String] = []
var error : [String] = []
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")
}
let status = task.terminationStatus
task.waitUntilExit()
return (output, error, status)
}
这是我的职能。例如,如果我使用以下代码,有时 mac 和 IP 地址打印得很好.但有时ip是空的,mac还可以。有时两者都是空的。
let mac = RunCommand("/bin/sh",args:"-c", "ifconfig en1 | grep ether |awk '{print $2}'")
let ip = RunCommand("/bin/sh",args:"-c", "ifconfig | grep 'inet ' | grep -v 127.0.0.1 | cut -d\ -f2")
print(mac)
print(ip)
您知道我应该如何使用这些代码始终毫无问题地获取数据吗?
我遇到了同样的问题,这很有趣,因为看起来我们复制并粘贴了相同的代码示例。我通过简化代码解决了我的问题,最终删除了"if var 字符串..."语句。