繁体   English   中英

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

[英]Can executables made with py2app include other terminal scripts and run them?

所以我有一个很好的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脚本,那将是一个非常有效的事情。 对于二进制可执行文件,它更加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)

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

你总是可以包含os模块并调用os.system(script); 它在终端/命令行中执行给定的参数。 例如:

import os
script = " a big long bash script "
os.system(script);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM