Ответ 1
Прочитав ваш комментарий к моему предыдущему ответу, вам нужно:
os.system("start /wait cmd /c {command}")
Держите ссылку на команду Windows всегда под рукой!
Я не понимаю, почему так сложно сделать это в 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.
Прочитав ваш комментарий к моему предыдущему ответу, вам нужно:
os.system("start /wait cmd /c {command}")
Держите ссылку на команду Windows всегда под рукой!
Принятый ответ не работал для меня. Чтобы открыть в новой командной строке, я использовал:
os.system("start /B start cmd.exe @cmd /k mycommand...")
Вы можете передать /WAIT в команду start
, чтобы дождаться завершения.
Как насчет
os.system("cmd /c {command here}")
Или даже
os.system("{command here}")
Это команда запуска, запускающая отдельный сеанс вместо того, чтобы использовать ту же программу, на которой запущена программа python.