Я не понимаю, почему так сложно сделать это в Windows.
Я хочу создать кучу окон командной строки, которые будут запускать другие скрипты. Причина, по которой я хочу это, - это то, что я могу видеть все выходные данные из каждого script аккуратно (если у меня есть только потоки/подпроцессы в главном окне, я не могу правильно просмотреть весь вывод). Я также не хочу регистрировать вывод, потому что он в основном предназначен для просмотра индикаторов выполнения, которые на самом деле не работают с файлами журнала.
Поэтому отдельные части моих требований работают, но не вместе:
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.