我不明白为什么在 Windows 上做到这一点这么难。
我想生成一堆命令提示符窗口来运行其他脚本。我想要这个的原因是这样我可以整齐地看到每个脚本的所有输出(如果我将它们只是主窗口中的线程/子进程,我无法正确查看所有输出)。我也不想记录输出,因为它主要用于查看进度条,这实际上不适用于日志文件。
因此,我的要求的各个部分可以工作,但不能一起工作:
os.system("start cmd /c {command here}") # Launches in new command prompt, closes when done
但是,操作系统不会让我等到命令完成(因为 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”替换操作系统相应的命令。