NSTask から返されたデータを読み取ろうとすると、ハングが発生し、返されません。実行中のスクリプトが実際に stdout と stderr の両方にデータを返すことを確認しました。これは、1 行を stdout に送信し、もう 1 行を stderr に送信する単純な 2 行のシェル スクリプトです。
NSLog出力は言う
取得したハンドル: <NSConcreteFileHandle: 0x10010a800>
そして、それはただハングします。これは私が使用しているコードです。
NSPipe *stderr = [NSPipe pipe];
NSPipe *stdout = [NSPipe pipe];
NSTask *task = [[NSTask alloc] init];
task.standardError = stderr;
task.standardOutput = stdout;
task.standardInput = [NSPipe pipe];
task.launchPath = @"/tmp/f";
[task launchPath];
[task waitUntilExit];
NSFileHandle *fh = [stderr fileHandleForReading];
NSLog(@"Got handle: %@", fh);
[fh readDataToEndOfFile];
NSLog(@"Read it");