Спроба прочитати дані, повернені з NSTaskвикликає зависання, яке ніколи не повертається. Я "перевірив, що мій запущений сценарій насправді повертає дані як stdout, так і stderr. Це простий сценарій оболонки з двома рядками, який відправляє одну лінію в 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 для відповіді № 1Це тому, що ви ніколи насправді не запускали своє завдання
[task launchPath];
Це просто повертає шлях завдання як рядок, він фактично не запускає завдання. Ти хочеш
[task launch];