簡體   English   中英

Python:在 Windows 上啟動新的命令提示符並等待它完成/退出

[英]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 /wait cmd /c {command}")

Windows 命令參考放在手邊!

接受的答案對我不起作用。
要在新的命令提示符下打開,我必須使用:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM