我已成功使用Py2app冻结了基于python的GUI脚本,但在Mac上使用此应用程序时遇到了麻烦。这个应用程序应该发送参数/参数Clustal,一个基于终端的应用程序,但它返回错误非零退出状态127,' / bin / sh:clustal:命令未找到&#39 ; 即可。
当我从 Frozen_apl.app>内容> MacOS> Frozen_apl (这是一个UNIX可执行文件)执行相同的应用程序时,我发现我的冻结应用程序可以成功发送shell命令。
为什么直接从app传递这些shell命令会被阻止?我怎样才能解决这个问题呢?
注意:Clustal已正确安装且其路径已正确设置。我使用OS X 10.9。我为Ubuntu和Windows冻结了相同的脚本,它们工作得很好。
答案 0 :(得分:1)
[基于评论中的讨论]这不是参数的问题,而是由于衍生的shell无法找到clustal
可执行文件。我不确定为什么会这样,因为它位于/ usr / local / bin / clustal中,而且/ usr / local / bin是OS X的默认路径(它是'列在/ etc / paths中)。使用可执行文件的完整路径,所以看起来冻结的应用程序正在生成一个带有非默认PATH的shell。
在冻结的应用程序中包含完整路径(/ usr / local / bin / clustal)并不是最佳解决方案;最好弄清楚如何在衍生的shell中获得正常的PATH。但我现在已经熟悉Py2app了解如何做到这一点。 (JeeYem:请在评论或其他答案中给出您提出的解决方法。)
答案 1 :(得分:1)
引用Py2app 0.6.4次要功能发布:
问题#15:py2app现在可以选择通过在终端中打开一个窗口来模拟你获得的shell环境。
用法:
python setup.py py2app --emulate-shell-environment
这个选项是实验性的,很难确定实现是否适用于所有系统。
在Py2app中使用此选项解决了Py2app-frozen应用程序与Os X shell之间通信受阻的问题。