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