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

Miz*_*mor 13 python macos py2app

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

提前致谢!

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

aba*_*ert 9

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

python setup.py py2app --resources foo
Run Code Online (Sandbox Code Playgroud)

如果这是一个shell脚本,那将是一个非常有效的事情.对于二进制可执行文件,它更加hacky.首先,p2app的文档清楚地说"不代码!".其次,OS X文档说不将可执行文件放在Resources目录中.这样做的主要原因是代码签名:默认设置将"密封"资源中的所有内容作为主应用程序签名的一部分,但是单独的可执行文件不应该以这种方式密封,它们应该单独签名.

然而,所有这一切,它仍然有效.除了它可能不会以+ x权限结束,所以在你的py2app步骤之后,你将不得不"chmod + x MyApp.app/Contents/Resources/foo"使它可以运行.

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

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

import Foundation
# ...
bundle = Foundation.NSBundle.mainBundle()
path = bundle.pathForResource_ofType_('foo', None)
Run Code Online (Sandbox Code Playgroud)

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