2012-07-23 20 views
15

我不明白爲什麼它是如此難以做到這一點在Windows上。的Python:在Windows上啓動新的命令提示符,然後等待它完成/退出

我想產卵一堆的命令提示符窗口,將運行其他腳本。我想這樣做的原因是,我可以清楚地看到每個腳本的所有輸出(如果我只是主窗口中的線程/子進程,我無法正確查看所有輸出)。我也不想記錄輸出,因爲它主要是查看進度條,而這些進度條並不適用於日誌文件。

我的要求,所以各個部件的工作,卻不能在一起:

os.system("start cmd /c {command here}")  # Launches in new command prompt, closes when done 

然而,OS系統不會讓我等待命令完成(因爲開始是實際的命令,第二它打開新的命令提示符是「完成」)

同樣的,如果我嘗試:

p = subprocess.Popen(["start", "cmd", "/k", "{command here}], shell = True) # Needs to be shell since start isn't an executable, its a shell cmd 
p.wait() # I can wait until finished (although it too finishes after start finishes) 

那麼,如何做到這一點?我讀過一個解決方案可能是使用processgroup,但它只是unix ....或類似的東西

或者,如果你有一個簡單的方法來顯示所有子進程的輸出在一個窗口中,那麼我不會不需要打開新的命令提示符並且可以簡單地使用線程。這也是有效的,但如果我讓4個線程下載一些東西並顯示進度條以及輸出其他信息,我不知道如何以可讀的方式顯示它(以及避免它們全部碰撞彼此)。

PS:這是在Windows Vista上。 PPS:我最好喜歡一個適用於Windows,Linux和Mac的解決方案,我現在專注於Windows,但我想要一個適用於所有三種解決方案的解決方案,而且我知道Windows是最挑剔的。我只是將「start cmd/c」替換爲OS適當的命令。

+0

是否有您使用「開始」的理由VS使用「加利福尼亞」作爲命令? – Joe 2012-07-23 15:21:49

+0

我發現只有這樣才能打開一個新的命令提示符,如果還有其他方法可以使用 – robev 2012-07-23 15:23:43

回答

1

如何

os.system("cmd /c {command here}") 

甚至

os.system("{command here}") 

它的啓動命令是啓動一個單獨的會話,而不是使用Python程序在運行在同一之一。

+0

這不會啓動一個新的命令提示符窗口,它會在當前窗口中運行它 – robev 2012-07-23 15:22:34

4

您可以通過/等待到start命令使其等待終止。

2

要在新的命令提示符窗口中打開我用:

os.system("start /B start cmd.exe @cmd /k mycommand...") 
相關問題