Могут ли исполняемые файлы, созданные с помощью py2app, включать другие терминальные сценарии и запускать их?

Итак, у меня есть хорошее приложение python для OS X, которое отлично работает. Он запускает внешний сценарий терминала, и я хотел бы включить его в мое приложение python. В идеале я мог бы запустить py2app и связать этот скрипт с ним в исполняемый файл, а затем включить его и запустить в части моего кода на python. Это возможно?

Заранее спасибо!

Extra Edit: Сценарий, который я использую, скомпилирован. Я не могу просто заглянуть внутрь и вставить его.

2 Solutions collect form web for “Могут ли исполняемые файлы, созданные с помощью py2app, включать другие терминальные сценарии и запускать их?”

См. http://svn.pythonmac.org/py2app/py2app/trunk/doc/index.html#option-reference и посмотрите параметр –resources. Например:

python setup.py py2app --resources foo 

Если бы это был сценарий оболочки, это было бы совершенно правильной вещью. Для двоичного исполняемого файла это немного более взломанно. Во-первых, в документации p2app четко сказано «не для кода!». Во-вторых, в документации по OS X говорится, что нельзя загружать исполняемые файлы в каталог ресурсов. Основной причиной этого является подписание кода: настройки по умолчанию «запечатывают» все в Ресурсах как часть основной подписи приложения, но отдельные исполняемые файлы не должны быть запечатаны таким образом, они должны быть подписаны отдельно.

Однако все, что сказано, все равно будет работать. За исключением того, что это, вероятно, не закончится с + 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 и т. Д.

Вы всегда можете включить модуль os и вызвать os.system(script); , Он выполняет данный аргумент в терминале / командной строке. Например:

 import os script = " a big long bash script " os.system(script); 
  • Где материал «печатает», когда приложение не работает с терминала?
  • py2app подбирает .git subdir пакета во время сборки
  • Как использовать py2app с python Anaconda?
  • SSLError в запросах при упаковке как OS X .app
  • Текстовый файл Bundle в приложении py2app (python)
  • Как указать значок py2app?
  • Компиляция рабочей сборки py2app для Leopard и Snow Leopard?
  • py2app построил приложение отображает `ERROR: pygame.macosx import FAILED` на других машинах
  • Python - лучший язык программирования в мире.