py2app/Mac アプリケーション バンドルでは、異なるコマンド ライン引数を渡すことによって、アプリ内から同じアプリの別のインスタンスを生成する方法はありますか?
または、Mac アプリ バンドルが与えられた場合、コマンド ラインから実行していくつかの引数を渡すにはどうすればよいですか?
Edit1:forking は制限付きのオプションであり、サード パーティの実行可能ファイルと app+I がバンドルされている場合は機能しない可能性があります。Mac と Windows でこれを実行する必要があります。
Edit2:サブプロセス モジュールを使用して、バンドルされた python スクリプトを実行する方法を質問します。
詳細:
私は py2app を使用して、アプリケーション用のアプリ バンドルを生成しています。私のアプリケーションには 2 つの部分があります
- MainApp: これは UI です
- BackgroundApp: 実際の仕事を行うバックグラウンド プロセス
MainApp と BackgroundApp の両方が python スクリプトとして実装されており、実際には、コマンドラインが異なる同じ python スクリプトです。
python myapp.py
python myapp.py --backgroundprocess
したがって、実行python myapp.py
すると、プログラムパスに基づいてバックグラウンドプロセスが自動的に開始されますが、アプリを py2app としてバンドルしたため、どの実行可能ファイルを呼び出して--backgroundprocess
オプションを渡す必要があるかわかりませんか?
私が試したこと
$ open MyApp.app/
これによりアプリが開きますが、引数を渡すことはできません。引数はopenコマンドの引数になり、アプリに渡されないためです$ MyApp.app/Contents/MacOS/MyApp --backgroundprocess
アプリを開きますが、引数がアプリに渡されていないように見えるため、背景プロセスは開きません
また、エラーをスローします
Traceback (most recent call last):
File "/Users/agyey/projects/myapp/release4.26/py2exe/dist/MyApp.app/Contents/Resources/run.py", line 4, in <module>
from renderprocess import RenderEngineApp
File "renderprocess/RenderEngineApp.pyc", line 6, in <module>
File "wx/__init__.pyc", line 45, in <module>
File "wx/_core.pyc", line 4, in <module>
File "wx/_core_.pyc", line 18, in <module>
File "wx/_core_.pyc", line 11, in __load
ImportError: dlopen(/Users/agyey/projects/myapp/release4.26/py2exe/dist/MyApp.app/Contents/Resources/lib/python2.5/lib-dynload/wx/_core_.so, 2): Library not loaded: @executable_path/../Frameworks/libwx_macud-2.8.0.dylib
Referenced from: /Users/agyey/projects/myapp/release4.26/py2exe/dist/MyApp.app/Contents/Resources/lib/python2.5/lib-dynload/wx/_core_.so
Reason: Incompatible library version: _core_.so requires version 7.0.0 or later, but libwx_macud-2.8.0.dylib provides version 2.6.0
結論: できないよう です OS X でコマンドラインからアプリを起動する
open
引数を除外しません。