Подождите, пока NSTask завершит выполнение команды терминала - PullRequest
0 голосов
/ 13 марта 2019

Я создаю приложение Cocoa, которое использует NSTask для вызова скрипта Python.

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, такую ​​как print hello world, используя NSTask, она запускается. Но когда я пытаюсь выполнить программу, выполнение которой через NSTask занимает больше времени (~ 40 секунд), она не выполняется, и я не могу получить строку вывода из терминала.

Как мне убедиться, что мой код выполняется в терминале, а затем управление передается следующим операторам в программе?

1 Ответ

0 голосов
/ 13 марта 2019

Вы можете добавить метод NSTask waitUntilExit после запуска задачи, который блокирует, или разрешить запуск задачи в фоновом режиме и использовать NSFileHandle readToEndOfFileInBackgroundAndNotify с вашим файловым каналом и добавить наблюдателя для уведомления NSFileHandleReadToEndOfFileCompletionNotification.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...