尝试读取从NSTask返回的数据会导致永不返回的挂起。我已经验证了我的脚本运行确实将数据返回到stdout和stderr。这是一个简单的双行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");
答案 0 :(得分:0)
这是因为你从未真正启动过你的任务。你打电话
[task launchPath];
只是将任务的路径作为字符串返回,它实际上并不启动任务。你想要
[task launch];
答案 1 :(得分:0)
汤姆是对的,但是您还需要启动任务才能尝试调用(47(2[0-9]|3[0-57-8]|[4-5][0-9]|6[1-24-7]|8[0-13-9]|9[04]))|(537[67])