python-subprocess: gewusst wie: ausführen einer app auf OS X?
Ich bin Portierung einer windows-Anwendung auf OS X 10.6.8. Es ist eine neue Plattform für mich, und ich bin vor einige Schwierigkeiten.
Die Anwendung ist ein kleiner webserver (Flasche+Kellnerin), die beim Start eines Browsers (basierend auf dem chromium embedded framework) durch einen Teilprozess call.
Browser ist eine app-Datei und läuft ok, beim starten von gui.
Bin ich starten Sie es auf diese Weise:
subprocess.Popen([os.getcwd()+"/cef/cefclient.app", '--url=http://127.0.0.1:8100'])
Leider, dies schlägt mit OSError: permission denied
.
Habe ich versucht, um das Skript auszuführen mit einem sudo
mit ähnlichen Ergebnis.
Kann ich die app starten von der shell mit dem folgenden Befehl:
open -a "cef/cefclient.app" --args --url-http://127.0.0.1:8100
Aber
subprocess.Popen(['open', '-a', os.getcwd()+'/cef/cefclient.app', '--args', '--url-http://127.0.0.1:8100'])
schlägt fehl mit dem folgenden Fehler
FSPathMakeRef(/Users/.../cefclient.app) failed with error -43.
Jede Idee, wie dieses Problem zu beheben?
os.getcwd()+'cef/cefclient.app'
sieht nicht richtig aus. Für michgetcwd()
nicht fügen Sie einen abschließenden Schrägstrich. Haben Sie vielleicht mehr Glück mitos.path.join(os.getcwd(), 'cef/cefclient.app')
- Sind Sie absolut sicher sein, benötigen Sie -einen nach dem öffnen? Ich glaube, Sie wollen nur, dass, wenn Sie versuchen, sich zu "öffnen" ein Dokument und müssen den Namen der Anwendung, die zu öffnen, sagte, das Dokument mit.
- Rechts das / fehlt nach getcwd. Trotzdem, der Befehl immer noch nicht
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Datei
cefclient.app
ist eigentlich ein Verzeichnis (eine Programm-bundle, speziell), nicht die ausführbare Datei der Anwendung. Die eigentliche ausführbare Datei befindet sich im bundle, mit einem Pfad wieContents/MacOS/executable_name
. Also, um es zu starten, würden Sie dies tun:open -a "Application Path" [arguments to app]
sollte funktionieren, obwohl. E. g.open -a /Applications/Google\ Chrome.app http://www.google.com
öffnet Google in meinem Chrome-Sitzung. Ihre Lösung starten Sie eine andere Instanz der app-das ist etwas, das Sie würden in der Regel nicht auf OS X.Popen(['open','-a','cef/cefclient.app','--args','--url-http://127.0.0.1:8100'])
?subprocess.Popen(['open', '-a', "/Applications/Google Chrome.app"])
funktioniert bei mir (oben, google.com war die "Datei", öffnen Sie gesagt wurde, zu öffnen mit Google Chrome, nicht ein argument übergeben Chrome)Alternativ
Nur darauf, wenn Sie Steuern möchten, stdin /stdout oder falls der Start der app ist genug.