[英]Python: Start new command prompt on Windows and wait for it finish/exit
我不明白為什么在 Windows 上執行此操作如此困難。
我想生成一堆將運行其他腳本的命令提示符窗口。 我想要這個的原因是我可以整齊地看到每個腳本的所有輸出(如果我在主窗口中只有線程/子進程,我無法正確查看所有輸出)。 我也不想記錄輸出,因為它主要用於查看進度條,而這實際上不適用於日志文件。
所以我的要求的各個部分都可以工作,但不能一起工作:
os.system("start cmd /c {command here}") # Launches in new command prompt, closes when done
但是,操作系統不會讓我等到命令完成(因為開始是實際命令,第二個它打開新的命令提示符是“完成”)
同樣,如果我嘗試:
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.system("start /B start cmd.exe @cmd /k mycommand...")
對我來說這似乎有效os.system("cmd /k {command}")
使用/k
cmd 執行然后保持打開狀態
使用/c
執行並關閉
打開一個新的命令窗口,然后執行命令os.system("start cmd /k {command}")
您可以將 /WAIT 傳遞給start
命令以使其等待終止。
怎么樣
os.system("cmd /c {command here}")
甚至
os.system("{command here}")
它是開始命令,它啟動一個單獨的會話,而不是使用運行 python 程序的同一個會話。
打開新的 cmd-window 的最簡單方法(如https://stackoverflow.com/a/11615580/3312367所指出的)是使用
os.system("start /wait cmd /c {command}")
但如果您的命令是帶有空格或其他控制字符的復雜命令,則它不是很有用。 為此,我使用:
subprocess.run(["start", "/wait", "cmd", "/K", command, "arg /?\^"], shell=True)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.