py2app中popen的权限问题

时间:2017-06-02 04:25:49

标签: python macos tkinter popen py2app

我正在使用py2app捆绑一个使用anaconda python发行版的python脚本。

由于py2app不能很好地处理需要用户输入的终端脚本,我有一个tkinter文件,py2app的setup.py启动,然后使用popen进一步启动我的.py脚本。

在本地,这很好用:

import subprocess as sub
command = "~/anaconda/bin/python -u myscript.py " + str(groups_count)
process = sub.Popen(command, shell=True, stdout=sub.PIPE, stderr=sub.PIPE, bufsize=1, universal_newlines=True)

但是当我想分发它时,我需要替换硬编码路径并使用

中包含的分发来运行它
import subprocess as sub
command = sys.executable + " -u myscript.py " + str(groups_count)
process = sub.Popen(command, shell=True, stdout=sub.PIPE, stderr=sub.PIPE, bufsize=1, universal_newlines=True)

这会导致错误:

  

/ bin / sh:/Users/username/projectname/appname/dist/MyOSXapp.app/Contents/MacOS/python:Permission denied

如果我查看/MyOSXapp.app/Contents/Frameworks中的libpython2.7.dylib,它似乎不是可执行文件,但每个人都可读。这全部由py2app组装。

我需要在pyapp内分发的anaconda python上运行popen。我该怎么做?

1 个答案:

答案 0 :(得分:0)

我通过在osx .app文件中添加由py2app保存的python文件的可执行权限来解决这个问题。

$ chmod +x ./dist/MyOSXapp.app/Contents/MacOS/python 

此外,还通过issue 228在py2app中添加了对此的修复程序。