python - скрипта - как открыть файл py



Python: Запустите новую командную строку в Windows и дождитесь ее завершения/выхода (3)

Я не понимаю, почему это так сложно сделать в 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 самая привередливая. Я бы просто заменил "start cmd / c" на соответствующую команду ОС.

https://src-bin.com


Answer #1

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


Answer #2

Как насчет

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

Или даже

os.system("{command here}")

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


Answer #3

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

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




windows