我正在尝试使用NSTask从cocoa应用程序启动一个循环python脚本。python脚本最终位于应用程序的Contents/Resources文件夹中。你知道吗
我获取脚本的路径并使用以下命令创建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)
也许进口报表把事情搞砸了?还是文件创建?你知道吗
问题是
os.environ['PWD']
的使用。PWD不返回正在执行的脚本的本地目录。嗯。解决方案是从argv[0]获取脚本的路径并使用该路径的目录:path = os.path.dirname(sys.argv[0])
然后根据需要传递路径。你知道吗
相关问题 更多 >
编程相关推荐