gpt4 book ai didi

python - Mac App 的可执行路径

转载 作者:太空狗 更新时间:2023-10-30 00:18:15 28 4
gpt4 key购买 nike

在 py2app/Mac 应用程序包中,有没有办法通过传递不同的命令行参数从应用程序内部生成同一应用程序的另一个实例?

或者给定一个 mac 应用程序包,我如何从命令行运行它并传递一些参数?

Edit1:forking 是一个有限的选项,它可能不适用于带有应用程序的 3rd 方可执行文件 bundle +我需要在 mac 和 windows 上运行它。
Edit2:问题是如何使用子进程模块运行捆绑的 python 脚本

详情:

我正在使用 py2app 为我的应用程序生成一个应用程序包。我的申请有两部分

  1. MainApp:这是用户界面
  2. BackgroundApp:一个后台进程,完成真正的工作

MainApp 和 BackgroundApp 都已实现为 python 脚本,实际上它们是具有不同命令行的相同 python 脚本,例如

python myapp.py
python myapp.py --backgroundprocess

因此,当我运行 python myapp.py 时,它会根据程序路径自动启动后台进程,但由于我现在已将我的应用程序捆绑为 py2app,所以我不确定应该调用和传递哪个可执行文件--backgroundprocess 选项?

我尝试过的

  1. $ open MyApp.app/ 这会打开应用程序,但我无法将参数传递给它,因为它们将是打开命令的参数,不会传递到我的应用程序

  2. $ 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 不排除参数。

最佳答案

如何找到 cwd 并执行任意提供的二进制文件首先将二进制文件放在 AppName.app/Contents/Resources 中,然后从 python 脚本运行此代码:

import subprocess
process=subprocess.Popen((os.getcwd() + "/3rd_party_binary","--subprocess"))
process.poll() # is running?

如何正确生成两个版本的 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

Multiprocessing in Python显然也适用于 Windows,我猜你会感兴趣(?)。

关于python - Mac App 的可执行路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4291880/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com