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