尝试读取从 NSTask 返回的数据会导致永远不会返回的挂起。我已经验证我正在运行的脚本实际上确实将数据返回到标准输出和标准错误。这是一个简单的两行 shell 脚本,将一行发送到 stdout,另一行发送到 stderr。
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");