Python:在Windows上启动新的命令提示符并等待它完成/退出

我不明白为什么在Windows上这么做很难。

我想产生一堆将运行其他脚本的命令提示符窗口。 我想这是因为我可以看到每个脚本整齐的输出(如果我有他们只是在主窗口中的线程/subprocess,我无法正常查看所有输出)。 我也不想logging输出,因为它主要是查看进度条,而这些进度条对日志文件没有任何作用。

所以我的要求的个别部分工作,但不是在一起:

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

但是,os系统不会让我等到命令结束(因为start是实际的命令,第二个会打开新的命令提示符“完成”)

同样如果我尝试:

 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) 

那我该怎么做呢? 我读了一个解决scheme可以使用processgroup,但它只是unix ….或类似的东西

或者,如果您在单个窗口中显示所有子过程的输出的方式很简单,则不需要打开新的命令提示符,只需使用线程即可。 这也可以,但是如果我有4个线程下载东西,显示一个进度条以及输出其他信息,我不知道如何以一种可读的方式显示它(以及避免它们全部碰撞彼此)。

PS:这是在Windows Vista上。 PPS:我最好喜欢一个能在Windows,Linux和Mac上运行的解决scheme,我现在专注于Windows,但是我想要一个适用于这三者的解决scheme,而且我知道Windows是最挑剔的。 我只是用操作系统适当的命令replace“start cmd / c”。

在阅读你对我以前的答案的评论你需要的是:

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

始终保持windows命令参考 !

您可以将/ WAIT传递给start命令以使其等待终止。

怎么样

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

甚至

 os.system("{command here}") 

这是启动命令启动一个单独的会议,而不是使用相同的一个python程序正在运行。

要在新的命令提示符窗口中打开,请使用:

 os.system("start /B start cmd.exe @cmd /k mycommand...")