如何使用NSNotification检查NSTask的状态?我知道NSTask中有几个类方法但是并不真正理解如何在Cocoa应用程序中实现它们。有人可以帮帮我吗?
答案 0 :(得分:5)
此博客文章Better way to read from an NSTask介绍了如何使用NSNotification
接收来自NSTask
的通知。
如果您知道您的任务没有长时间运行,那么有一个更简单的解决方案。我对另一个SO问题的回答Execute a terminal command from a Cocoa app,有一个使用NSTask
的示例,其中包括返回任务状态,无NSNotification
答案 1 :(得分:0)
感谢Gordon,我已经尝试了你给出的解决方案,但是当我编写代码时,让我感到困惑的是:
NSPipe *pipe;
pipe = [NSPipe pipe];
[task setStandardOutput: pipe];
NSFileHandle *file;
file = [pipe fileHandleForReading];
[task launch];
NSData *data;
data = [file readDataToEndOfFile];
输出数据可以从任务返回什么?对于我的情况,控制台窗口jus卡在那里并且没有返回任何内容
答案 2 :(得分:0)
当您无法读取stdout / stderr上发送的内容时,任务将被卡住。这就是为什么你需要创建管道并使用setStandardOutput
设置它们。
使用[NSFileHandle readToEndOfFileInBackgroundAndNotify]
并等待NSFileHandleReadToEndOfFileCompletionNotification
。它将为您提供回调中的所有数据。