从具有多线程打印输出的NSTask获取输出

时间:2015-11-03 01:00:22

标签: xcode multithreading swift nstask nsfilehandle

我有一个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);通过子线程从任务打印的任何内容都不会被捕获。如果我从终端运行任务,所有内容都会毫无问题地打印到屏幕上。

除了主任务的输出外,我怎样才能从任务的子线程中捕获输出?或者这个问题是否可能与任务的线程无关,但是文件读取器通知会发生意外情况?谢谢你的帮助!

0 个答案:

没有答案