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

Python:在Windows上启动新命令提示符并等待它完成/退出,python,windows,Python,Windows,我不明白为什么在Windows上这么难做到这一点 我希望生成一组命令提示符窗口,这些窗口将运行其他脚本。我希望这样做的原因是,我可以清楚地看到每个脚本的所有输出(如果我在主窗口中看到的只是线程/子进程,我无法正确地查看所有输出)。我也不想记录输出,因为它主要用于查看进度条,而进度条实际上不适用于日志文件 因此,我的需求的各个部分可以工作,但不能一起工作: os.system("start cmd /c {command here}") # Launches in new command

我不明白为什么在Windows上这么难做到这一点

我希望生成一组命令提示符窗口,这些窗口将运行其他脚本。我希望这样做的原因是,我可以清楚地看到每个脚本的所有输出(如果我在主窗口中看到的只是线程/子进程,我无法正确地查看所有输出)。我也不想记录输出,因为它主要用于查看进度条,而进度条实际上不适用于日志文件

因此,我的需求的各个部分可以工作,但不能一起工作:

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)
那我该怎么做呢?我在某个地方读到一个解决方案是使用processgroup,但它只是unix…或者类似的东西

或者,如果您有一种在单个窗口中显示所有子流程输出的简洁方式,那么我不需要打开新的命令提示符,只需使用线程即可。这也行得通,但如果我有4个线程来下载一些东西,并显示进度条以及输出其他信息,我不知道如何以可读的方式显示这些信息(同时避免它们相互碰撞)

这是在WindowsVista上。 PPS:我更喜欢在Windows、Linux和Mac上运行的解决方案,我现在主要关注Windows,但我希望这三种系统都能运行,我知道Windows是最挑剔的。我只想用“start cmd/c”替换操作系统相应的命令。

怎么样

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

os.system("{command here}")

它是启动一个单独会话的start命令,而不是使用运行python程序的同一个会话。

阅读您对我前面答案的评论后,您需要的是:

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

随时待命

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

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

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

对我来说,这似乎有效
os.system(“cmd/k{command}”)

使用
/k
cmd执行,然后保持打开状态
使用
/c
执行并关闭

打开新的命令窗口,然后执行命令

os.system(“start cmd/k{command}”)

使用“start”和“cmd”作为命令有什么原因吗?我发现打开新命令提示符的唯一方法是,如果有另一种方法不启动新的命令提示符窗口,它会在当前窗口中运行,这是不正确的/B确保您没有打开命令prompt@yes4me,您可能是对的,但奇怪的是,这段代码在Windows上启动一个新的命令提示符,并等待它完成/退出,如图所示…
/c
只是关闭cmd,甚至不等待命令完成执行。有没有办法让它等到命令完全执行,然后自动关闭命令提示符?或者,如果有任何其他方法在新的cmd窗口上运行多个命令?答案中链接的windows命令参考中的否:
/c执行字符串指定的命令,然后停止。