2009-06-19 75 views
28

我想在後臺打開一個進程並與其進行交互,但是這個進程在Linux和Windows中都應該是不可見的。在Windows中,你必須做一些東西與STARTUPINFO,雖然這不是有效的在Linux中:帶隱藏窗口的跨平臺子進程

ValueError: startupinfo is only supported on Windows platforms

是否有一個不是爲每個操作系統創建一個單獨的POPEN命令更簡單的方式?

if os.name == 'nt': 
    startupinfo = subprocess.STARTUPINFO() 
    startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW 
    proc = subprocess.Popen(command, startupinfo=startupinfo) 
if os.name == 'posix': 
    proc = subprocess.Popen(command)  

回答

31

您可以減少一個行:)

startupinfo = None 
if os.name == 'nt': 
    startupinfo = subprocess.STARTUPINFO() 
    startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW 
proc = subprocess.Popen(command, startupinfo=startupinfo) 
+0

Aha。我曾嘗試startupinfo ='',它不起作用。這是我正在尋找的答案。 – endolith 2009-06-20 13:44:52

+1

我只是看着通過子進程代碼,看看他們如何產生錯誤消息,他們檢查startupinfo是不是無,應該在python – 2009-06-20 14:57:16

3

我不知道你可以比你做的更簡單。您正在討論優化大概5行代碼。爲了這筆錢,我只需要接受我的項目,並接受它作爲跨平臺開發的後續工作。如果你做了很多,然後創建一個專門的類或函數來封裝邏輯並導入它。

1

你可以把你的代碼:

params = dict() 

if os.name == 'nt': 
    startupinfo = subprocess.STARTUPINFO() 
    startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW 
    params['startupinfo'] = startupinfo 

proc = subprocess.Popen(command, **params) 

,但是這不是好多了。

+2

無需在所有系統上創建參數Popen接受參數startupinfo,但在posix上它應該是無 – 2009-06-19 06:54:17

12

剛一說明:爲的Python 2.7我必須使用subprocess._subprocess.STARTF_USESHOWWINDOW而不是subprocess.STARTF_USESHOWWINDOW