【发布时间】:2015-02-10 23:57:54
【问题描述】:
我已经成功地使用 Py2app 冻结了一个基于 python 的 GUI 脚本,但是我在 Mac 上使用这个应用程序时遇到了麻烦。这个应用程序应该向基于终端的应用程序 Clustal 发送参数/参数,但它反而返回错误非零退出状态 127, '/bin/sh: clustal: command not found' .
我发现当我从 Frozen_apl.app>Contents>MacOS>Frozen_apl(这是一个 UNIX 可执行文件)执行同一个应用程序时,我的冻结应用程序可以成功发送 shell 命令。
为什么这些 shell 命令在直接从应用程序传递时会被阻止?我该如何解决这个问题?
注意:Clustal 已正确安装并且其路径已正确设置。我使用 OS X 10.9。我为 Ubuntu 和 Windows 冻结了相同的脚本,它们工作得很好。
【问题讨论】:
-
这看起来不像是参数的问题,而是寻找
clustal本身的问题。您说它已正确安装并设置了路径,但它在哪里,您如何设置 PATH? (请注意,每个进程都有自己的 PATH,仅仅因为您在交互式 shell 中设置它并不意味着它会为您的应用生成的 shell 设置。) -
@GordonDavisson,感谢您的评论! Clustal 安装在 /usr/local/bin/ 中,并且路径设置在 .bash_profile 中,如果这是您所要求的。你能想到为什么它在应用程序目录中运行 UNIX 可执行文件但在运行应用程序本身时不起作用的任何原因吗?
-
奇怪; /usr/local/bin 实际上在 OS X 的默认 PATH 中。我不确定 Py2app 究竟是如何产生的,但我想它可能设置了一个不同的(最小)PATH,然后以不运行的模式运行 shell '不使用 .bash_profile 初始化。我会尝试使用
clustal的完整路径,看看是否能解决它。如果是这样,可能有更好的选择,但我不确定它是什么。 -
@GordonDavisson,如果我使用完整路径调用
clustal,冻结的应用程序可以正常工作。我将不得不更改我的脚本以获得clustal的完整路径,然后执行它。感谢您的建议!您可以将其发布为我接受的答案,否则,我将在未来某个时间发布关于我如何解决它的描述
标签: python macos argument-passing exit-code py2app