代码之家  ›  专栏  ›  技术社区  ›  Manavalan Gajapathy Pal

从Mac中的应用程序向终端应用程序传递shell命令

  •  0
  • Manavalan Gajapathy Pal  · 技术社区  · 9 年前

    我已经成功地使用Py2app冻结了一个基于python的GUI脚本,但在Mac上使用这个应用程序时遇到了麻烦。这个应用程序应该向Clustal(一个基于终端的应用程序)发送参数,但它返回了一个错误 非零退出状态127,“/bin/sh:clustal:未找到命令” .

    我发现当我从 Frozen_apl.app>内容>MacOS>冻结(_A) (它是UNIX可执行文件)。

    当这些shell命令直接从应用程序传递时,为什么会被阻止?我该如何解决这个问题?

    注:Clustal安装正确,路径设置正确。我使用OS X 10.9。我已经为Ubuntu和Windows冻结了相同的脚本,它们工作正常。

    2 回复  |  直到 9 年前
        1
  •  1
  •   Gordon Davisson    9 年前

    [根据评论中的讨论]这不是参数的问题,这是由于派生的shell无法找到 clustal 可执行文件。我不确定为什么会出现这种情况,因为它位于/usr/local/bin/clusteral中,并且/usr/local/bin位于OS X的默认PATH中(列在/etc/PATH中)。使用可执行文件的完整路径是有效的,因此冻结的应用程序似乎正在生成具有非默认path的shell。

    在冻结的应用程序中包含完整路径(/usr/local/bin/cluster)并不是真正的最佳解决方案;最好弄清楚如何在派生的shell中获得一个正常的PATH。但我现在已经足够熟悉Py2app,知道如何做到这一点。(JeeYem:请在评论或其他回答中给出您提出的解决方法。)

        2
  •  1
  •   Manavalan Gajapathy Pal    9 年前

    引用Py2app 0.6.4次要功能版本:

    问题15:py2app现在有一个选项,可以通过在终端中打开一个窗口来模拟shell环境。

    用法: python setup.py py2app --emulate-shell-environment

    这个选项是实验性的,它的实现是否能在所有系统上运行还很难说。

    在Py2app中使用此选项解决了Py2app冻结应用程序和Os X shell之间通信受阻的问题。