Я знаю, как отправлять данные задаче:
NSData *charlieSendData = [[charlieImputText stringValue] dataUsingEncoding:NSUTF8StringEncoding];
[[[task standardInput] fileHandleForWriting] writeData:charlieSendData];
Но как мне узнать, что задача отвечает ??
Elijah
Задайте NSPipe
или NSFileHandle
в качестве стандартного вывода задачи
и прочтите его.
NSTask * list = [[NSTask alloc] init];
[list setLaunchPath:@"/bin/ls"];
[list setCurrentDirectoryPath:@"/"];
NSPipe * out = [NSPipe pipe];
[list setStandardOutput:out];
[list launch];
[list waitUntilExit];
[list release];
NSFileHandle * read = [out fileHandleForReading];
NSData * dataRead = [read readDataToEndOfFile];
NSString * stringRead = [[[NSString alloc] initWithData:dataRead encoding:NSUTF8StringEncoding] autorelease];
NSLog(@"output: %@", stringRead);
Обратите внимание, что если вы используете трубу, вы должны беспокоиться о ее заполнении. Если вместо этого вы предоставите NSFileHandle
, задача может выводить все, что хочет, без необходимости беспокоиться о потере чего-либо, но вы также получаете накладные расходы, связанные с записью данных на диск.