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