2012-10-25 156 views
0

我正在將一個Windows應用程序移植到OS X 10.6.8。這是一個新的平臺,我面臨一些困難。python subprocess:如何在OS X上運行應用程序?

該應用程序是一個小的網絡服務器(瓶+服務員),該啓動瀏覽器(基於鉻嵌入式框架)由於子進程調用。

瀏覽器是一個應用程序文件,並從GUI啓動時運行正常。

我推出這樣說:

subprocess.Popen([os.getcwd()+"/cef/cefclient.app", '--url=http://127.0.0.1:8100']) 

不幸的是,這種失敗OSError: permission denied

我試圖用類似的結果運行具有sudo腳本。

我可以從外殼使用以下命令啓動應用程序:

open -a "cef/cefclient.app" --args --url-http://127.0.0.1:8100 

subprocess.Popen(['open', '-a', os.getcwd()+'/cef/cefclient.app', '--args', '--url-http://127.0.0.1:8100']) 

失敗,出現以下錯誤

FSPathMakeRef(/Users/.../cefclient.app) failed with error -43. 

不知道如何解決這個問題?

+0

'os.getcwd()+'CEF/cefclient.app''看起來不正確的。對我而言,'getcwd()'不會添加尾部斜線。 'os.path.join(os.getcwd(),'cef/cefclient.app')''你可能有更好的運氣' – vicvicvic

+0

你確定你需要-a打開後?我相信你只想要如果你試圖「打開」一個文件,並需要提供打開該文件的應用程序的名稱。 – zzzirk

+0

getcwd後面的/缺少。無論如何,該命令仍然失敗 – luc

回答

5

文件cefclient.app實際上是一個目錄(一個application bundle,具體地),而不是應用程序的可執行文件。真正的可執行文件位於軟件包內部,路徑類似於Contents/MacOS/executable_name。因此,要啓動它,你可以這樣做:

subprocess.Popen([os.getcwd()+"/cef/cefclient.app/Content/MacOS/executable_name", 
        "--url=http://127.0.0.1:8100"]) 
+1

使用'open -a「應用程序路徑」[應用程序的參數]「應該可以工作。例如。 'open -a/Applications/Google \ Chrome.app http:// www.google.com'在我的Chrome會話中打開Goog​​le。你的解決方案將啓動應用程序的另一個實例 - 這是你通常不會在OS X上做的事情。 – vicvicvic

+0

所以它應該是'Popen(['open',' - a','cef/cefclient.app', '--args',' - url-http://127.0.0.1:8100'])'? – Useless

+0

是的,這似乎爲我工作。 'subprocess.Popen(['open','-a','/ Applications/Google Chrome.app「])'適用於我(以上,http://google.com是打開被告知的」文件「使用谷歌瀏覽器打開,而不是傳遞給Chrome的參數) – vicvicvic

1

另外,

os.system('open -a "cef/cefclient.app" --args --url-http://127.0.0.1:8100') 

,如果你想控制標準輸入/輸出,或者在啓動應用程序是足夠的只是依賴。

相關問題