【问题标题】:Permission issues with popen within py2apppy2app中popen的权限问题
【发布时间】:2017-06-02 04:25:48
【问题描述】:

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

由于 py2app 不能很好地与需要用户输入的终端脚本配合使用,我有一个 py2app 的 setup.py 启动的 Tkinter 文件,然后使用 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: 权限被拒绝

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

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

【问题讨论】:

    标签: python macos tkinter popen py2app


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-09-18
      • 1970-01-01
      • 2013-05-27
      • 1970-01-01
      • 1970-01-01
      • 2014-06-16
      • 1970-01-01
      • 2020-11-24
      • 1970-01-01
      相关资源
      最近更新 更多