Чтобы понять, почему это происходит, нужно сначала разобраться, как действует команда DOS start в целом. Грубо говоря, командная строка DOS вида start command действует, как если бы команда command вводилась в диалоговом окне Windows Выполнить (Run), которое можно открыть с помощью меню кнопки Пуск (Start). Если command является именем файла, он открывается точно так же, как если щелкнуть на его имени в графическом интерфейсе Проводника Windows (Windows Explorer).
Например, следующие три команды DOS автоматически запускают Internet Explorer, программу просмотра файлов графических изображений, и программу проигрывания звуковых файлов для соответствующих файлов в командах. Windows просто открывает файл в той программе, которая определена для обработки файлов с указанным расширением. Более того, все три эти программы выполняются независимо от окна консоли DOS, в котором введена команда:
C:\…\PP4E\System\Media> start lp4e-preface-preview.html
C:\…\PP4E\System\Media> start ora-lp4e.jpg
C:\…\PP4E\System\Media> start sousa.au
Поскольку команда start может запустить любой файл и командную строку, нет причин, по которым ее нельзя было бы использовать для запуска независимо выполняемой программы Python:
C:\…\PP4E\System\Processes> start child.py 1
Это возможно благодаря тому, что при установке Python регистрируется для открытия файлов с расширениями .py. Сценарий child.py будет запущен независимо от окна консоли DOS, несмотря на то, что не было задано ни имя выполняемого файла интерпретатора Python, ни путь к нему. Однако, поскольку child.py просто выводит сообщение и завершается, результат не вполне удовлетворителен: новое окно DOS появляется, чтобы обслужить стандартный вывод сценария, и тут же исчезает, когда он завершается. Лучше будет, если добавить в конец программы вызов функции input, чтобы перед завершением происходило ожидание нажатия какой-либо клавиши:
C:\…\PP4E\System\Processes> type child-wait.py
import os, sys
print(‘Hello from child’, os.getpid(), sys.argv[1])
input(“Press <Enter>”) # предотвращает исчезновение окна консоли в Windows
C:\…\PP4E\System\Processes> start child-wait.py 2
Теперь окно DOS дочерней программы появляется на экране и сохраняется после возврата из команды start. Нажатие клавиши Enter во всплывающем окне DOS заставляет его закрыться.
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011