我不明白为什么在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)
那么我该怎么做呢?我在某处读到一个解决方案可能是使用进程组,但这仅是unix或类似的东西。
或者,如果您有一种巧妙的方式在一个窗口中显示所有子流程的输出,那么我就不需要打开新的命令提示符,而只需使用线程即可。那也可行,但是如果我说有4个线程下载一些东西并显示进度条以及输出其他信息,我不知道如何以一种可读的方式显示该信息(以及避免它们相互冲突)彼此)。
PS:这是在Windows Vista上。PPS:我最好希望能在Windows,Linux和Mac上都可以使用的解决方案,我现在只专注于Windows,但是我想可以对这三个版本都可以使用的解决方案,而且我知道Windows是最灵活的。我只是将“ start cmd / c”替换为适合操作系统的命令。
阅读您对我之前的回答的评论后,您需要的是:
os.system("start /wait cmd /c {command}")
保持Windows命令引用总是在手!