我试图使用NSTask从可可应用程序启动循环Python脚本。 python脚本最终在应用程序的Contents/Resources文件夹中。可可应用程序无法启动循环python脚本。建立/运行时通过xcode
我得到的脚本路径,并与创建NSTask:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSString *scriptPath = [[NSBundle mainBundle] pathForResource:filename ofType:@"py"];
NSTask* task = [[NSTask alloc] init];
task.launchPath = PYTHON_PATH;
task.arguments = [NSArray arrayWithObjects:scriptPath, nil];
[task launch];
[task waitUntilExit];
});
(我省略了可读性stdOutPipe东西)
当我建立&从Xcode中运行我的应用程序它的工作原理如预期的那样,任务保持在waitUntilExit
并且python脚本连续运行。
当我尝试从生成的.app文件运行它时,它会到达waitUntilExit
,暂停一段时间,然后退出并出现错误。我已经登录python脚本,所以我知道在这段时间内没有运行脚本的任何部分。脚本路径为python脚本的位置,并从xcode或.app运行时返回相同的路径。
我想我必须有一些项目设置的设置不正确,但它看起来像它的处理资源正确。任何想法?
更新1 仅使用print语句运行非循环python脚本适用于.app。以下非循环脚本也失败了:
#!/usr/bin/python
import os
def log(string):
print(string)
path = os.environ['PWD'] + '/smoke_screen_test.txt'
f1=open(path, 'a')
f1.write(string + "\n")
if __name__ == '__main__':
log("Test works")
exit(0)
也许导入语句搞乱了它?或者文件创建?
一个简单的非循环Python脚本可以从相同的路径运行吗? – pkamb
@pkamb好问题! .app将无错地执行一个非循环的python函数。这是否告诉你什么? – Dirk
@pkamb其实我很快就会谈到,只有打印语句的测试非循环脚本将在.app中执行,但上面更新中的脚本也会失败。 – Dirk