0

NSTask オブジェクト内で Perl スクリプトを実行しており、その出力は NSPipe に送られます。通知を使用して定期的に出力を受け取り、GUI を更新しています。

Perl スクリプトは実際には他のプロセスを生成し、その出力はこのパイプに入っていないように見えますが、デバッガー コンソールには表示され、そこで実行されていることがわかります。他のプロセスが終了し、メインのプロセスが再開すると、アプリは再びパイプからの通知を受信し始めます。

これらのプロセスの出力を同じパイプ、または通知を取得できる別のパイプに入れることは可能ですか?

どうもありがとう

4

2 に答える 2

2

サブプロセスはおそらくその出力を標準エラー ストリームに書き込んでいます (標準出力と同様に、サブプロセスは親プロセスから継承します)。タスクの標準エラーと標準出力を設定してみてください。(両方とも同じパイプを使用してください。)

于 2009-11-21T02:05:17.390 に答える
1

Peter Hosey が指摘しているように、子プロセスstderrは ではなくへの書き込みを処理する可能性がありstdoutます。stdoutstderrはどちらも子プロセスに継承されるため、起動するタスクの を認識しているパイプに設定するとstderr、その子プロセスはそのパイプに書き込む必要があります。その後、必要に応じてそこから読み取ることができます。

または、Perl スクリプトを変更して、子プロセスを にリダイレクトすることもできstderrますstdout。これにより、Obj-C コードを変更しなくても同じ結果が得られるはずです。

ピーターの解決策ははるかに優れています。

于 2009-11-21T23:51:39.653 に答える