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 является наиболее утонченной. Я бы просто заменил «начало cmd / c» для соответствующей команды OS.

Прочитав свой комментарий к моему предыдущему ответу, вам нужно:

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

Всегда держите ссылку на команду Windows !

Вы можете передать / WAIT команде start чтобы дождаться завершения.

Как насчет

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

Или даже

 os.system("{command here}") 

Это команда запуска, запускающая отдельный сеанс вместо того, чтобы использовать ту же программу, на которой запущена программа python.

Чтобы открыть в новом окне командной строки, я использую:

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