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

时间:2012-07-23 15:18:26

标签: python windows

我不明白为什么在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个线程下载东西并显示进度条以及输出其他信息我不知道如何以可以读取的方式显示(以及避免它们全部碰撞)彼此)。

PS:这是在Windows Vista上。 PPS:我最好喜欢适用于Windows,Linux和Mac的解决方案,我现在专注于Windows,但我想要一个适用于所有三种解决方案的解决方案,我知道Windows是最挑剔的。我只是将“start cmd / c”替换为OS适当的命令。

5 个答案:

答案 0 :(得分:32)

在阅读您对我之前回答的评论后,您需要的是:

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

始终保持the windows command reference

答案 1 :(得分:8)

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

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

答案 2 :(得分:4)

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

答案 3 :(得分:3)

对我来说,这似乎奏效了
os.system("cmd /k {command}")

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

要打开新的命令窗口,然后执行命令
os.system("start cmd /k {command}")

答案 4 :(得分:1)

怎么样

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

甚至

os.system("{command here}")

启动命令是启动单独会话而不是使用运行python程序的会话的启动命令。