我在NSTask对象中运行一个Perl脚本,它的输出进入NSPipe。我正在使用通知定期接收它的输出并更新GUI。
Perl脚本实际上产生了其他进程似乎没有进入此管道的进程,但确实出现在调试器控制台中,我可以看到它们在那里运行。当其他进程结束并且主进程恢复时,应用程序开始再次从管道接收通知。
是否可以将这些进程的输出放入同一个管道,或者我可以从中获取通知的其他管道?
非常感谢
答案 0 :(得分:2)
子进程可能正在将该输出写入其标准错误流(与标准输出一样,它们从其父进程继承)。尝试设置任务的标准错误以及标准输出。 (两者都使用相同的管道。)
答案 1 :(得分:1)
正如Peter Hosey指出的那样,孩子可能会处理写入stderr
而不是stdout
。由于stdout
和stderr
都是由子进程继承的,如果您将启动的任务的stderr
设置为您知道的管道,则其子进程应写入该管道。然后,您可以根据自己的意愿阅读。
或者,您可以更改Perl脚本以将子进程“stderr
重定向到stdout
”。这样可以在不必更改任何Obj-C代码的情况下为您提供相同的结果。
彼得的解决方案到目前为止更好。