Cocoa应用无法启动循环的Python脚本。在通过Xcod构建/运行时可以工作。

2024-04-23 11:29:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用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)

也许进口报表把事情搞砸了?还是文件创建?你知道吗


Tags: path路径脚本logapp应用程序taskstring
1条回答
网友
1楼 · 发布于 2024-04-23 11:29:40

问题是os.environ['PWD']的使用。PWD不返回正在执行的脚本的本地目录。嗯。解决方案是从argv[0]获取脚本的路径并使用该路径的目录:

path = os.path.dirname(sys.argv[0])

然后根据需要传递路径。你知道吗

相关问题 更多 >