我正在构建一个使用NSTask调用python脚本的Cocoa应用程序。
NSPipe *pipe = [NSPipe pipe];
NSFileHandle *file = pipe.fileHandleForReading;
NSTask *task = [[NSTask alloc] init];
[task setLaunchPath:@"/anaconda3/bin/python"]; // Python path
[task setArguments:@[@"run.py"]]; //My program to be executed on terminal
task.standardOutput = pipe;
task.standardError = pipe;
[task launch];
[task waitUntilExit];
NSData *data = [file readDataToEndOfFile];
[file closeFile];
NSString *output = [[NSString alloc] initWithData: data encoding:NSUTF8StringEncoding];
NSLog (@"output:\n%@", output);
当我尝试运行一个小python程序(如使用NSTask打印hello world)时,它将被执行。但是,当我尝试执行需要花费较长时间(约40秒)才能通过NSTask执行的程序时,该程序未执行,并且无法从终端获取输出字符串。
如何确保我的代码在终端中执行,然后将控件传递给程序中的下一个语句?
答案 0 :(得分:0)
您可以在启动任务后添加NSTask的waitUntilExit
方法,该方法会阻止或让任务在后台运行,并在文件管道中使用NSFileHandle的readToEndOfFileInBackgroundAndNotify
并为{{1 }}通知。