多个 NSTasks 导致输出不一致

Multiple NSTasks Causing Inconsistent Output

我正在开发一个 Swift 应用程序,该应用程序与外部二进制文件(通过 NSTask)交互,并且 return 每行的输出都是字符串数组。

多次调用 executeCommand 函数时,命令开始无法达到 return 预期数据。

在下面的 Playground 示例中,我正在轮询 diskutil 以获取卷名称。

在调试区,我得到的第一个响应是:

只需重新运行 Playground 结果:

我确实需要一致的结果,但不明白我哪里出错了。

如有任何帮助,我们将不胜感激!

我认为任务的异步执行导致了不一致的结果。下面是一个按预期工作的新函数:

func executeCommand(launchPath: String, arguments: [String]) -> [String] {

    let task: NSTask = NSTask()
    let pipe: NSPipe = NSPipe()

    task.launchPath = launchPath
    task.arguments = arguments
    task.standardOutput = pipe
    task.launch()
    task.waitUntilExit()

    let handle = pipe.fileHandleForReading
    let data = handle.readDataToEndOfFile()
    let outputString = String(data: data, encoding: NSUTF8StringEncoding) ?? ""

    var outputArray = [String]()
    outputArray = outputString.componentsSeparatedByCharactersInSet(.newlineCharacterSet())
    return outputArray

}