python - 使用 py2app 制作的可执行文件可以包含其他终端脚本并运行它们吗?

标签 python macos py2app

所以我有一个很好的适用于 OS X 的 python 应用程序,它运行良好。它运行一个外部终端脚本,我想将它包含在我的 python 应用程序中。理想情况下,我将能够运行 py2app 并将此脚本与其捆绑到可执行文件中,然后能够将其包含并在我的代码的 python 部分中运行它。这可能吗?

提前致谢!

额外编辑:我正在使用的脚本已编译。我不能只看里面然后粘贴它。

最佳答案

参见 http://svn.pythonmac.org/py2app/py2app/trunk/doc/index.html#option-reference并查看 --resources 参数。例如:

python setup.py py2app --resources foo

如果这是一个 shell 脚本,那将是一件完全有效的事情。对于二进制可执行文件,它有点老套。首先,p2app 的文档明确表示“不适用于代码!”。其次,OS X 文档说不要将可执行文件放在 Resources 目录中。这样做的主要原因是代码签名:默认设置“密封”资源中的所有内容作为主应用程序签名的一部分,但不应以这种方式密封单独的可执行文件,它们应该单独签名。

然而,尽管如此,它仍然有效。除了它可能不会以 +x 权限结束,所以在你的 py2app 步骤之后,你必须“chmod +x MyApp.app/Contents/Resources/foo”才能使其可运行。

您还可以使用 distutils package_data、data_files 和/或 MANIFEST 东西来添加具有任意相对路径的任意文件,这可能是更好的解决方案,但它更复杂。

无论哪种方式,在您的脚本中,您都应该使用与包相关的路径,您可以通过 PyObjC 轻松访问该路径。鉴于您使用的是 PowerPC 可执行文件,您可能需要如此多的向后兼容性以至于您不能依赖它,在这种情况下您可能不得不只使用“../Resources/foo”,但除此之外,它看起来像这样:

import Foundation
# ...
bundle = Foundation.NSBundle.mainBundle()
path = bundle.pathForResource_ofType_('foo', None)

然后您可以使用 NSTask 或子进程、Popen、os.system 等启动它。

关于python - 使用 py2app 制作的可执行文件可以包含其他终端脚本并运行它们吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11370012/

相关文章:

python - 为 Leopard 和 Snow Leopard 编译 py2app 工作版本?

python - 如何使用 pyqt 和 py2app 将 "About box"添加到 Mac 应用程序?

python - pip:安装依赖项的依赖项

javascript - Splash 无法获取整个页面

swift - 如何跟踪 NSMutableAttributedString 中的位置?

objective-c - 如何绘制半透明的NSTableRowView?

python - Django ModelChoiceField - 使用 id 以外的东西?

python - 如何解析没有类的表并保持分组

objective-c - 具有自定义分辨率的 OSX 全屏(信息亭)应用程序

python-3.x - py2app 构建正常,但应用程序失败并显示 "_tkinter.TclError"(并且没有错误消息!)