首页 > 解决方案 > macOS Bundle 从 shell 脚本调用 python

问题描述

我在 macOS 上制作了一个小 shell 脚本 + python 工具,我希望能够从扩展坞运行。它在终端上运行良好。

我按照我在网上找到的指南制作了一个 Bundle,这似乎是在 Mac 的 Dock 中获取脚本的最轻量级的方法。

OpenRandomFile.app/
  Contents/
    MacOS
      OpenRandomFile

OpenRandomFile具有可执行权限集并以 zsh shebang 开头的 shell 脚本在哪里。

该脚本从 Python 脚本中捕获文件名输出,如下所示:

open -R "`/usr/bin/python ./randomfile.py`"

我已经尝试randomfile.py在包内和文件系统外使用 Python 脚本,始终使用完整路径。

当我从扩展坞或其他地方的捆绑图标运行它时,它会打开一个根驱动器的 Finder 窗口,忽略 Python 脚本。

我是 macOS 黑客的新手,所以我不知道如何调试它。它从终端运行,但我根本不希望停靠版本打开终端,但它没有,但这意味着我无法从 shell 脚本或 python 打印调试字符串。所以我根本不知道如何验证 Python 是否正在执行。

我首先怀疑某些部分没有访问目录的权限,但是在这种情况下,macOS 通常会向用户显示一个对话框。我现在怀疑这与沙盒有关,所以我希望将 Python 脚本移动到 Bundle 中会解决这个问题。

到目前为止,我还没有 info.plist 文件,也不能 100% 确定如何正确制作。在 info.plist 中添加 Python 脚本会以某种方式将其注册为捆绑包的正式一部分吗?

关于 macOS 包中的 python 脚本的问题很少,所以我只用谷歌搜索就走运了。

虽然我确信有一些解决方法,但我确信值得花时间了解 macOS 捆绑包中的可能性或不可能性,以及如何正确设置和调试它们。

标签: pythonmacosdebuggingbundlesandbox

解决方案


推荐阅读