NSTask挂起readDataToEndOfFile

时间:2013-07-02 16:59:56

标签: objective-c nstask

尝试读取从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");

2 个答案:

答案 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])