NSTaskを使用してUNIXの「apropos」コマンドを実行しようとしています。これが私のコードです:
NSTask *apropos = [[NSTask alloc] init];
NSPipe *pipe = [[NSPipe alloc] init];
[apropos setLaunchPath:@"/usr/bin/apropos"];
[apropos setArguments:[NSArray arrayWithObjects:@"filename", @"match", nil]];
[apropos setStandardOutput:pipe];
[apropos launch];
[apropos waitUntilExit];
問題は、これが二度と戻らないことです。また、Appleのサンプルコード(TaskWrapper)を使用してみましたが、出力(3つのセグメント)が返されますが、processFinishedハンドラーが呼び出されることはありません。
さらに、appendOutput:ハンドラーは重複を受け取ります。したがって、たとえば、aproposがこれを返す場合:
1 2 3 4 5
私はこのようなものを受け取るかもしれません:
1 2 3
1 2 3 4
5
(3つの追加メッセージにグループ化されます)。
Aproposは、データを直接標準出力に直接出力するのではなく、コマンドラインで上下にスクロールできる形式で出力を表示することに注意してください。NSTaskとNSPipeを介してこれを確実に読み取るにはどうすればよいですか?