Python: Inicie um novo prompt de comando no Windows e espere que ele termine / saia
Eu não entendo porque é tão difícil fazer isso no Windows.
Eu quero gerar um monte de janelas de prompt de comando que irá executar outros scripts. A razão pela qual eu quero isso é para que eu possa ver toda a saída de cada script ordenadamente (se eu tiver apenas threads / subprocessos na janela principal, não consigo visualizar toda a saída corretamente). Eu também não quero registrar a saída porque é principalmente para visualizar as barras de progresso, que realmente não funcionam com arquivos de log.
Assim, partes individuais dos meus requisitos funcionam, mas não juntas:
os.system("start cmd /c {command here}") # Launches in new command prompt, closes when done
No entanto, o sistema OS não me deixa esperar até que o comando seja concluído (desde que o início seja o comando real, no segundo em que ele é aberto, o novo prompt de comando é "concluído")
Da mesma forma, se eu tentar:
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)
Então, como faço isso? Eu li em algum lugar que uma solução poderia ser usar processgroup mas é apenas unix .... ou algo parecido
Ou, se você tiver uma maneira simples de exibir a saída de todos os subprocessos em uma única janela, não será preciso abrir um novo prompt de comando e simplesmente usar encadeamentos. Isso funciona também, mas se eu tiver digamos 4 threads fazendo download de alguma coisa e exibindo uma barra de progresso, além de gerar outras informações, não sei como exibir isso de uma maneira que possa ser lida (assim como evitá-las todas colidindo com entre si).
PS: Isso é no Windows Vista. PPS: Preferiria preferencialmente uma solução que funcionasse no Windows, Linux e Mac. Estou focando no Windows por enquanto, mas gostaria de uma solução que funcione para todos os três, e sei que o Windows é o mais exigente. Gostaria apenas de substituir "o início cmd / c" para o comando adequado do sistema operacional.