python – Ruta ejecutable a la aplicación Mac

En un paquete de aplicaciones py2app / Mac, ¿hay una manera de generar otra instancia de la misma aplicación desde dentro de la aplicación, pasando diferentes argumentos de línea de comando?

o dado un paquete de aplicaciones de mac, ¿cómo puedo ejecutarlo desde la línea de comandos y pasar algunos argumentos también?

Edit1: forking es una opción limitada, que puede no funcionar con un paquete de ejecutables de terceros con la aplicación Necesito ejecutar esto en mac y windows.
Edit2: la pregunta es cómo ejecutar un script de Python agrupado usando el módulo de subproceso

Detalles:

Estoy usando py2app para generar un paquete de aplicaciones para mi aplicación. Mi aplicación tiene dos partes

> MainApp: cual es la interfaz de usuario
> BackgroundApp: un proceso en segundo plano, que hace el trabajo real

Tanto MainApp como BackgroundApp se han implementado como secuencia de comandos de Python y en realidad son la misma secuencia de comandos de Python con una línea de comandos diferente, por ejemplo.

python myapp.py
python myapp.py --backgroundprocess

Entonces, cuando ejecuto python myapp.py, se inicia automáticamente un proceso en segundo plano basado en la ruta del programa, pero como ahora he empaquetado mi aplicación como py2app, no estoy seguro de a qué ejecutable debería llamar y pasar la opción de proceso de fondo.

Lo que he intentado

> $ abrir MyApp.app/ esto abre la aplicación pero no puedo pasarle los argumentos, ya que serán argumentos para el comando de apertura y no se pasarán a mi aplicación
> $ MyApp.app/Contents/MacOS/MyApp –backgroundprocess abre la aplicación pero no el proceso de fondo, ya que parece que los argumentos no se están pasando a la aplicación

tambien arroja error

  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

Conclusión: parece que puede no ser posible
Launch an app on OS X with command line

abierto no excepto argumentos.

Mejor respuesta
Cómo encontrar cwd y ejecutar un binario suministrado arbitrariamente
Primero coloque el binario en AppName.app/Contents/Resources y luego ejecute este código desde el script de python:

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

Cómo generar correctamente dos versiones de tu aplicación Python

Fork es la antigua forma probada de hacer esto en 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

Aparentemente, Multiprocessing in Python es algo que también funciona en Windows, que creo que sería interesante para usted (?).

Por favor indique la dirección original:python – Ruta ejecutable a la aplicación Mac - Código de registro