NSTask NSPipe - objective c command line help

后端 未结 2 618
梦毁少年i
梦毁少年i 2020-12-03 02:24

Here is my code:

task = [[NSTask alloc] init];
[task setCurrentDirectoryPath:@\"/applications/jarvis/brain/\"];
[task setLaunchPath:@\"/applications/jarvis/b         


        
2条回答
  •  [愿得一人]
    2020-12-03 02:51

    Xcode Bug
    There's a bug in Xcode that stops it from printing any output after a a new task using standard output is launched (it collects all output, but no longer prints anything). You're going to have to call [task setStandardInput:[NSPipe pipe]] to get it to show output again (or, alternatively, have the task print to stderr instead of stdout).


    Suggestion for final code:

    NSTask *server = [NSTask new];
    [server setLaunchPath:@"/bin/sh"];
    [server setArguments:[NSArray arrayWithObject:@"/path/to/server.sh"]];
    [server setCurrentDirectoryPath:@"/path/to/current/directory/"];
    
    NSPipe *outputPipe = [NSPipe pipe];
    [server setStandardInput:[NSPipe pipe]];
    [server setStandardOutput:outputPipe];
    
    [server launch];
    [server waitUntilExit]; // Alternatively, make it asynchronous.
    [server release];
    
    NSData *outputData = [[outputPipe fileHandleForReading] readDataToEndOfFile];
    NSString *outputString = [[[NSString alloc] initWithData:outputData encoding:NSUTF8StringEncoding] autorelease]; // Autorelease optional, depending on usage.
    

提交回复
热议问题