NSTask зависает на readDataToEndOfFile

Попытка чтения данных, возвращаемых из NSTask, приводит к зависанию, которое никогда не возвращается. Я проверил, что мой выполняемый скрипт действительно возвращает данные как в stdout, так и в stderr. Это простой двухстрочный скрипт, который отправляет одну строку в 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");

2 ответа

Решение

Это потому, что вы никогда не запускали свою задачу. Ты звонишь

[task launchPath];

Это просто возвращает путь к задаче в виде строки, но фактически не запускает задачу. Ты хочешь

[task launch];

Том прав, но также вам нужно запустить задачу, прежде чем пытаться вызвать readDataToEndOfFile

Другие вопросы по тегам