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

2024-05-06 14:49:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我不明白为什么在窗户上这么难。

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

因此,我的需求中的个别部分起作用,但不是同时起作用:

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:这是在WindowsVista上。 PPS:我希望有一个能在Windows、Linux和Mac上运行的解决方案,目前我主要关注Windows,但我希望有一个能在这三个系统上运行的解决方案,我知道Windows是最挑剔的。我只需要用“start cmd/c”替换操作系统相应的命令。


Tags: 进度条命令脚本cmdhere进程oswindows
3条回答

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

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

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

在阅读您对我先前答案的评论时,您需要的是:

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

随时保持the windows command reference在手边!

相关问题 更多 >