我在NSTask對象內運行Perl腳本,輸出進入NSPipe。我正在使用通知來定期接收它的輸出並更新GUI。將NSTask與產生另一個進程的NSPipe和Perl腳本結合使用
Perl腳本實際上產生了其他進程,其輸出似乎沒有進入該管道,但確實出現在調試器控制檯中,我可以看到它們在那裏運行。當其他進程結束並且主進程恢復時,應用程序再次開始接收來自管道的通知。
是否有可能將這些進程的輸出到同一個管道或另一個可以從中獲取通知的管道?
非常感謝
我在NSTask對象內運行Perl腳本,輸出進入NSPipe。我正在使用通知來定期接收它的輸出並更新GUI。將NSTask與產生另一個進程的NSPipe和Perl腳本結合使用
Perl腳本實際上產生了其他進程,其輸出似乎沒有進入該管道,但確實出現在調試器控制檯中,我可以看到它們在那裏運行。當其他進程結束並且主進程恢復時,應用程序再次開始接收來自管道的通知。
是否有可能將這些進程的輸出到同一個管道或另一個可以從中獲取通知的管道?
非常感謝
的子過程可能編寫輸出到標準錯誤流(其中,像標準輸出,他們從他們的父進程繼承)。嘗試設置任務的標準錯誤以及標準輸出。 (對於兩者都使用相同的管道。)
正如Peter Hosey指出的那樣,兒童可能會寫入stderr
而不是stdout
。由於stdout
和stderr
都由子進程繼承,因此如果將啓動的任務的stderr
設置爲您知道的管道,則其子進程應寫入該管道。您可以隨意閱讀。
或者,您可以更改Perl腳本以將子進程的stderr
重定向到stdout
。這應該給你相同的結果,而不必更改任何Obj-C代碼。
彼得的解決方案是更好的。
使用與標準錯誤工作相同的管道。謝謝! – Struddie 2009-11-21 13:56:39