【发布时间】:2011-05-16 13:36:36
【问题描述】:
在 py2app/Mac 应用程序包中,有没有办法通过传递不同的命令行参数从应用程序中生成同一应用程序的另一个实例?
或给定一个 mac 应用程序包,我如何从命令行运行它并传递一些参数?
Edit1:forking 是一个有限的选项,它可能不适用于与应用程序捆绑的第 3 方可执行文件+我需要在 Mac 和 Windows 上运行它。
Edit2:问题是如何使用子进程模块运行捆绑的 python 脚本
详情:
我正在使用 py2app 为我的应用程序生成一个应用程序包。我的应用程序有两个部分
- MainApp:这是 UI
- BackgroundApp:后台进程,做真正的工作
MainApp 和 BackgroundApp 都已实现为 python 脚本,实际上它们是具有不同命令行的相同 python 脚本,例如
python myapp.py
python myapp.py --backgroundprocess
所以当我运行python myapp.py 时,它会根据程序路径自动启动后台进程,但是由于我现在将我的应用程序捆绑为 py2app,我不确定我应该调用什么可执行文件并传递--backgroundprocess 选项?
我尝试过的
$ open MyApp.app/这会打开应用程序,但我无法将参数传递给它,因为它们将是打开命令的参数,不会传递给我的应用程序$ 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
结论:看起来不可能 Launch an app on OS X with command line
open 不排除参数。
【问题讨论】: