我有一个Xcode应用程序(用Swift编写,虽然这应该是无关紧要的)启动一个控制台应用程序(即用C ++编写的终端应用程序)并期望从其标准和错误输出中读取输出。任务从其主线程打印,也从其创建的另一个子线程打印。
任务设置如下:
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)
问题是我的app只接收主线程的输出(通过任务的标准和错误输出的FileHandleForReading);通过子线程从任务打印的任何内容都不会被捕获。如果我从终端运行任务,所有内容都会毫无问题地打印到屏幕上。
除了主任务的输出外,我怎样才能从任务的子线程中捕获输出?或者这个问题是否可能与任务的线程无关,但是文件读取器通知会发生意外情况?谢谢你的帮助!