如何使用NSNotification来检查NSTask的状态

时间:2009-01-13 08:23:41

标签: cocoa

如何使用NSNotification检查NSTask的状态?我知道NSTask中有几个类方法但是并不真正理解如何在Cocoa应用程序中实现它们。有人可以帮帮我吗?

3 个答案:

答案 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。它将为您提供回调中的所有数据。