13

だから私は、うまく機能しているOS X用の素敵なpythonアプリを持っています。外部端末スクリプトを実行します。それを私のpythonアプリに含めたいと思います。理想的には、py2app を実行し、このスクリプトを実行可能ファイルにバンドルしてから、コードの python 部分に含めて実行できるようにします。これは可能ですか?

前もって感謝します!

追加編集:私が使用しているスクリプトはコンパイルされています。中をのぞき込んで貼り付けることはできません。

4

2 に答える 2

10

http://svn.pythonmac.org/py2app/py2app/trunk/doc/index.html#option-referenceを参照し、 --resources パラメータを確認してください。例えば:

python setup.py py2app --resources foo

これがシェル スクリプトである場合、それは完全に有効なことです。バイナリ実行可能ファイルの場合は、もう少しハックです。まず、p2app のドキュメントには、「コードではありません!」と明確に記載されています。第 2 に、OS X のドキュメントには、実行可能ファイルを Resources ディレクトリに配置しないように記載されています。これの主な理由はコード署名です。デフォルト設定では、メイン アプリの署名の一部としてリソース内のすべてを「封印」しますが、個別の実行可能ファイルはそのように封印することは想定されておらず、個別に署名することになっています。

ただし、そうは言っても、それでも機能します。おそらく +x パーミッションで終わらないことを除いて、py2app ステップの後、「chmod +x MyApp.app/Contents/Resources/foo」を実行可能にする必要があります。

distutils package_data、data_files、および/またはMANIFESTなどを使用して、任意の相対パスを持つ任意のファイルを追加することもできます。これはより良い解決策かもしれませんが、より複雑です.

いずれにせよ、スクリプトでは、PyObjC 経由で簡単にアクセスできるバンドル関連のパスを使用する必要があります。PowerPC 実行可能ファイルを使用している場合、下位互換性が非常に必要になるため、信頼できない場合があります。次のようになります。

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

その後、NSTask、subprocess、Popen、os.system などで起動できます。

于 2012-07-07T00:14:44.263 に答える
0

osモジュールと callをいつでも含めることができますos.system(script);。端末/コマンドラインで指定された引数を実行します。例えば:

import os
script = " a big long bash script "
os.system(script);
于 2012-07-06T21:51:41.710 に答える