dare una NSPipe
o un NSFileHandle
come il compito del standardOutput
, e leggere da questo.
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);
Si noti che se si utilizza un tubo, è necessario preoccuparsi del riempimento del tubo. Se invece si fornisce uno NSFileHandle
, l'attività può produrre tutto ciò che desidera senza che si debba preoccuparsi di perdere qualsiasi, ma si ottiene anche il sovraccarico di dover scrivere i dati sul disco.
fonte
2010-08-09 19:19:35
ho già faccio. [task standardOutput] - Se lo chiamo, darà l'output? – objectiveccoder001
@Elijah per impostazione predefinita, no. Se si desidera l'output, è necessario fornire un pipe o un filehandle prima di avviare l'attività, quindi avviare la lettura dal filehandle (o '[pipe fileHandleForReading]') per recuperare i dati. (E ti darà oggetti 'NSData', non stringhe o altro) –
Puoi mostrare un esempio? – objectiveccoder001