Dar una NSPipe
o un NSFileHandle
como la tarea de standardOutput
, y leer de eso.
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);
Tenga en cuenta que si utiliza una tubería, debe preocuparse de que la tubería se llene. Si en su lugar proporciona un NSFileHandle
, la tarea puede dar como resultado todo lo que quiere sin tener que preocuparse por perder ninguna, pero también obtiene la sobrecarga de tener que escribir los datos en el disco.
ya lo hago eso. [task standardOutput] - Si solo llamo a esto, ¿dará la salida? – objectiveccoder001
@Elijah por defecto, no. Si desea la salida, debe proporcionar un pipe o filehandle antes de iniciar la tarea, y luego comenzar a leer desde filehandle (o '[pipe fileHandleForReading]') para recuperar los datos. (Y le dará objetos 'NSData', no cadenas ni nada) –
¿Puede mostrar un ejemplo? – objectiveccoder001