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" для ОС соответствующая команда.

Ответы на вопрос(4)

Ваш ответ на вопрос