Anu*_*yal 6 python macos py2app
在py2app/Mac应用程序包中,有没有办法通过传递不同的命令行参数从应用程序中生成相同应用程序的另一个实例?
或者给出一个mac app bundle,如何从命令行运行它并传递一些参数呢?
Edit1:forking是一个有限的选项,可能不适用于第三方可执行文件捆绑app +我需要在mac和windows上运行它.
Edit2:问题是如何使用子进程模块运行捆绑的python脚本
我正在使用py2app为我的appilcation生成一个应用程序包.我的申请分为两部分
MainApp和BackgroundApp都已实现为python脚本,实际上它们是具有不同命令行的相同python脚本,例如
python myapp.py
python myapp.py --backgroundprocess
Run Code Online (Sandbox Code Playgroud)
因此,当我运行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
Run Code Online (Sandbox Code Playgroud)
结论:看起来可能无法 使用命令行在OS X上启动应用程序
open 除了参数之外没有.
如何查找 cwd 并执行任意提供的二进制文件 首先将二进制文件放在 AppName.app/Contents/Resources 中,然后从 python 脚本运行以下代码:
import subprocess
process=subprocess.Popen((os.getcwd() + "/3rd_party_binary","--subprocess"))
process.poll() # is running?
Run Code Online (Sandbox Code Playgroud)
如何正确生成 python 应用程序的两个版本
Fork 是在 MacOSX (unix) 上执行此操作的旧尝试方法
#!/usr/bin/env python
import os, sys
pid = os.fork()
if pid:
# we are the parent
background_process.start()
os.waitpid(pid, 0) # make sure the child process gets cleaned up
else:
# we are the child
gui_app.start()
sys.exit(0)
print "parent: got it; text =", txt
Run Code Online (Sandbox Code Playgroud)
Python 中的多处理显然也可以在 Windows 上运行,我想您会对此感兴趣(?)。
| 归档时间: |
|
| 查看次数: |
2042 次 |
| 最近记录: |