2011-06-17 84 views
7

可能重複:
Running a process in pythonw with Popen without a console
How do I eliminate Windows consoles from spawned processes in Python (2.7)?執行從Python的子進程,而無需打開Windows命令提示符

我有一個調用一個單獨的數字運算程序的Python程序(用C語言編寫)多次作爲子進程(使用subprocess.check_call)。它在Linux上效果很好,除了一件小事外,它在Windows上也很棒:每次調用子進程時,都會創建一個命令提示符窗口,然後在子進程退出時很快銷燬。

這根本不影響計算,但是非常煩人,因爲這個窗口在屏幕上和屏幕上不停地閃爍,並且使得在計算機上做其他事情變得很困難,因爲新的命令提示符窗口可以竊取鍵盤焦點。

如何簡單地執行子進程(沒有GUI),並防止創建命令提示符窗口?

+1

你使用shell =真調用'subprocess.check_call'什麼時候?如果是的話,儘量不要使用它,看看行爲是否沒有改變。 – mouad

+0

請參閱http://stackoverflow.com/questions/1016384/cross-platform-subprocess-with-hidden-window – JacquesB

回答

0

你打電話給subprocess.check_call()?如果您通過shell=True,則不應創建該窗口,因爲這將導致SW_HIDE標誌被設置爲STARTUPINFO.wShowWindow屬性。

例子:

subprocess.check_call(["ping", "google.com"], shell=True) 
+0

這也有點痛苦,因爲它不只是工作;它現在有一些錯誤,因爲它不喜歡當我給它一個相對路徑,如果我給它一個絕對路徑它不喜歡,因爲它有它的空間... –

+0

我最終剛剛通過手動STARTUPINFO。像魅力一樣工作。 –

+6

請不要宣傳'shell = True'作爲解決方案,因爲它恰好隱藏了控制檯。看到我的答案[這裏](http://stackoverflow.com/a/12964900/95735)。 –

2

當您構建C應用程序時,請將其類型設置爲Win32子系統而不是控制檯子系統。如果這是一個預先構建的應用程序,則可以使用this tool來更改子系統。

+0

如何在Visual C++ 2010 Express中執行此操作? –

+0

好的,我發現在連接器選項中,但現在它說我需要定義一些名爲_WinMain的函數。 –

+0

您需要將'main()'重命名爲'WinMain()'。函數簽名:http://msdn.microsoft.com/en-us/library/ff381406%28v=vs.85%29.aspx –

相關問題