2009-11-28 71 views
12

我有,通過一個POPEN調用運行外部程序的GUI程序:運行與POPEN pythonw的過程沒有一個控制檯

p = subprocess.Popen("<commands>" , stdout=subprocess.PIPE , stderr=subprocess.PIPE , cwd=os.getcwd()) 
p.communicate() 

但是控制檯彈出,無論我做什麼我(也試過把NUL傳遞給文件句柄)。有沒有辦法做到這一點,而沒有得到我打電話來釋放它的控制檯的二進制文件?

+0

這些命令通常會在控制檯中運行嗎?你是否試圖運行另一個沒有控制檯的GUI程序? – 2009-11-28 21:56:30

回答

24

here

import subprocess 

def launchWithoutConsole(command, args): 
    """Launches 'command' windowless and waits until finished""" 
    startupinfo = subprocess.STARTUPINFO() 
    startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW 
    return subprocess.Popen([command] + args, startupinfo=startupinfo).wait() 

if __name__ == "__main__": 
    # test with "pythonw.exe" 
    launchWithoutConsole("d:\\bin\\gzip.exe", ["-d", "myfile.gz"]) 
+0

啊哈!謝謝。我甚至沒有注意到那裏的選項... – sbirch 2009-11-28 22:03:22

2

您可能能夠只是做subprocess.Popen([command], shell=False)

這就是我使用反正。節省你所有的廢話設置標誌和什麼。 一旦命名爲.pyw或運行pythonw它不應該打開一個控制檯。

+0

shell = False已經是默認了,所以我沒有看到這是要解決什麼問題:https://docs.python.org/2/library/subprocess .html#subprocess.Popen – totaam 2016-03-26 04:52:24

+1

'shell = False'不會改變任何東西,解決方案是使用'shell = True'和'.pyw'文件。 – ZeroFunter 2016-10-13 21:34:54

1

只是做subprocess.Popen([command], shell=True)

+0

什麼'pyw'文件?他需要運行一個外部應用程序。 – 2017-09-07 15:41:23

+0

這工作就像一個魅力。你不需要'.pyw'文件。 – vy32 2017-09-26 13:36:26

0

這很好地工作在WIN32API。其他解決方案不適合我。

import win32api 
chrome = "\"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe\"" 
args = "https://stackoverflow.com" 

win32api.WinExec(chrome + " " + args)