NSURLSessionDataTask *dataTask = [self.session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error)
{
NSLog(@"Did fail with error %@" , [error localizedDescription]);
fail();
return ;
}
else
{
}
我使用dataTaskWithRequest
发送异步http请求,在完成块中,我想运行python script
。
NSTask * task = [[NSTask alloc] init];
[task setLaunchPath:kPythonPath];
[task setArguments:@[self.scriptFileFullPath,outputFile]];
[task launch];
[task waitUntilExit];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkPythonTaskStatus:) name:NSTaskDidTerminateNotification object:task];
python
任务可能需要很长时间,所以我应该等待它的完成。但由于NSTaskDidTerminateNotification
在单独的线程中运行,因此不会发送NSTask
。有人知道如何等待NSTask
完成这种情况吗?
答案 0 :(得分:6)
NSTask
有一个属性terminationHandler
。
任务完成后调用完成块。任务 对象被传递给块以允许访问任务参数, 例如,确定任务是否成功完成。
NSTask * task = [[NSTask alloc] init];
task.launchPath = kPythonPath;
task.arguments = @[self.scriptFileFullPath, outputFile];
task.terminationHandler = ^(NSTask *task){
// do things after completion
};
[task launch];