Xcode 从具有多线程打印输出的NSTask获取输出
我有一个Xcode应用程序(用Swift编写,但这应该是无关的),它启动控制台应用程序(即用C++编写的终端应用程序),并期望从标准输出和错误输出中读取输出。任务从其主线程打印,也从它创建的另一个子线程打印 任务设置如下所示:Xcode 从具有多线程打印输出的NSTask获取输出,xcode,multithreading,swift,nstask,nsfilehandle,Xcode,Multithreading,Swift,Nstask,Nsfilehandle,我有一个Xcode应用程序(用Swift编写,但这应该是无关的),它启动控制台应用程序(即用C++编写的终端应用程序),并期望从标准输出和错误输出中读取输出。任务从其主线程打印,也从它创建的另一个子线程打印 任务设置如下所示: standardOutputPipe = NSPipe() standardErrorPipe = NSPipe() someTask = NSTask() someTask!.launchPath = transporterPath
standardOutputPipe = NSPipe()
standardErrorPipe = NSPipe()
someTask = NSTask()
someTask!.launchPath = transporterPath
someTask!.standardOutput = standardOutputPipe!
someTask!.standardError = standardErrorPipe!
someTask!.standardOutput!.fileHandleForReading.readInBackgroundAndNotify()
someTask!.standardError!.fileHandleForReading.readInBackgroundAndNotify()
NSNotificationCenter.defaultCenter().addObserver(self, selector: "standardDataReceived:",
name: NSFileHandleReadCompletionNotification, object: someTask!.standardOutput!.fileHandleForReading)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "errorDataReceived:",
name: NSFileHandleReadCompletionNotification, object: someTask!.standardError!.fileHandleForReading)
问题是我的应用程序只接收来自主线程的输出(通过任务的FileHandleForReading on Standard和Error输出);通过子线程从任务打印的任何内容都不会被捕获。如果我从终端运行任务,所有内容都会毫无问题地打印到屏幕上
除了主任务的输出外,如何捕获任务子线程的输出?或者,这个问题是否可能与任务的线程无关,而是与FileReader通知发生的意外事件有关?谢谢你的帮助 您可能需要显示辅助线程的主函数。您是否正在运行它的runloop?尝试添加一些日志以确保它不会立即退出?@nielsbot NSTask肯定不会立即退出,因为我从它的主线程获得输出,直到手动终止任务。我如何告诉次要线程的主函数?NSTask是否从其调用函数(即主程序)混淆其子线程?