2011-04-13 29 views
1

下面的代碼工作正常的Windows:如何啓動與許多參數的程序在Python/Linux的

subprocess.Popen([PATH_TO_G++]/g++ file.cpp -o file.exe) 

但是在Linux中,我得到了以下錯誤:

OSError: [Errno 2] No such file or directory

閱讀文檔後和幾個SO線程,我發現子進程.Popen在Windows和nix系統中的工作方式不同。在Windows中,它將字符串作爲參數並啓動它,就像在終端中啓動它一樣。

在linux下,如果你有參數,它需要一個字符串列表。第一個值是程序本身,然後是屬性。通過傳遞Shell = True參數可以使其表現得像Windows一樣,但對我來說這不是一個好的解決方案。

我嘗試了shlex.split函數,但它仍然不起作用。

+0

您是否試過'subprocess.Popen([「progpath」,「arg1」,「arg2」,「arg3」])? – khachik 2011-04-13 13:08:40

+0

@khachik,是的,但我可能會誤解他們。如何使用我的例子的參數? – Alex 2011-04-13 13:11:23

+0

您可以在所有平臺上按順序傳遞參數。你真正的問題是什麼? – 2011-04-13 13:11:29

回答

4

根據你的榜樣,您需要確保命令被正確引用:

subprocess.Popen([PATH_TO_G++ + "/g++", "file.cpp", "-o", "file.exe"]) 

沒有辦法PATH_TO_G ++是一個有效的變量名,所以我只是要假設你提供作爲一個例子。

現在,更重要的是,你想用子過程做什麼?只需啓動它並將其作爲主要操作?啓動它並捕獲輸出?在後臺啓動它?

subprocess模塊的文檔非常清晰,並提供a lot of examples關於如何使用它的文檔。