我想從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