我想从Cocoa应用程序运行Python脚本。它在主线程上工作得很好,但我想让它在后台运行,并发GCD队列。使用GCD从Cocoa应用程序运行Python脚本
我用下面的方法来建立一个运行Python脚本经理类:
- (BOOL)setupPythonEnvironment {
if (Py_IsInitialized()) return YES;
Py_SetProgramName("/usr/bin/python");
Py_Initialize();
NSString *scriptPath = [[NSBundle mainBundle] pathForResource:@"MyScript" ofType:@"py"];
FILE *mainFile = fopen([scriptPath UTF8String], "r");
return (PyRun_SimpleFile(mainFile, (char *)[[scriptPath lastPathComponent] UTF8String]) == 0);
}
在这之后的脚本(反复)从下面的实例方法调用,使用一个共享的单一实例该管理器类:
- (id)runScriptWithArguments:(NSArray *)arguments {
return [NSClassFromString(@"MyScriptExecutor") runWithArguments:arguments];
}
上面Objective-C代码挂钩插入下面的Python代码:
from Foundation import *
def run_with_arguments(arguments):
# ...a long-running script
class MyScriptExecutor(NSObject):
@classmethod
def runWithArguments_(self, arguments):
return run_with_arguments(arguments)
当我总是从主队列中运行上述Objective-C方法时,这种方法有效,但是当从任何其他队列运行时,脚本将返回null。有人可以解释我,如果我试图做的只是不被支持,是否有一个好的方法呢?
Python脚本经常被调用并且运行时间很长,所以在主线程上执行该脚本会太慢,一个会运行它形成一个串行队列。另外,我想尽可能在Objective-C中包含并发代码。
感谢,
没有足够的信息在这个例子中真正知道你在做什么。 – jkh 2012-01-15 06:58:38
你能告诉我你是如何将Python二进制文件与xcode集成的吗? – bijan 2012-10-22 12:10:23