使用NSTask和NSPipe以及生成另一个进程的Perl脚本

时间:2009-11-20 21:58:13

标签: cocoa pipe nstask

我在NSTask对象中运行一个Perl脚本,它的输出进入NSPipe。我正在使用通知定期接收它的输出并更新GUI。

Perl脚本实际上产生了其他进程似乎没有进入此管道的进程,但确实出现在调试器控制台中,我可以看到它们在那里运行。当其他进程结束并且主进程恢复时,应用程序开始再次从管道接收通知。

是否可以将这些进程的输出放入同一个管道,或者我可以从中获取通知的其他管道?

非常感谢

2 个答案:

答案 0 :(得分:2)

子进程可能正在将该输出写入其标准错误流(与标准输出一样,它们从其父进程继承)。尝试设置任务的标准错误以及标准输出。 (两者都使用相同的管道。)

答案 1 :(得分:1)

正如Peter Hosey指出的那样,孩子可能会处理写入stderr而不是stdout。由于stdoutstderr都是由子进程继承的,如果您将启动的任务的stderr设置为您知道的管道,则其子进程应写入该管道。然后,您可以根据自己的意愿阅读。

或者,您可以更改Perl脚本以将子进程“stderr重定向到stdout”。这样可以在不必更改任何Obj-C代码的情况下为您提供相同的结果。

彼得的解决方案到目前为止更好。