【问题标题】:NSTask hangs on readDataToEndOfFileNSTask 挂在 readDataToEndOfFile
【发布时间】:2013-07-02 16:59:55
【问题描述】:

尝试读取从 NSTask 返回的数据会导致永远不会返回的挂起。我已经验证我正在运行的脚本实际上确实将数据返回到 stdout 和 stderr。这是一个简单的两行 shell 脚本,将一行发送到 stdout,另一行发送到 stderr。

NSLog 输出显示

得到句柄:

然后它就挂了。这是我正在使用的代码。

    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");

【问题讨论】:

    标签: objective-c nstask


    【解决方案1】:

    这是因为您从未真正启动过您的任务。你打电话

    [task launchPath];
    

    这只是将任务的路径作为字符串返回,它实际上并没有启动任务。你想要的

    [task launch];
    

    【讨论】:

      【解决方案2】:

      Tom 是对的,但您还需要在尝试调用 readDataToEndOfFile 之前启动任务

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多