Запуск других программ из Python

07.05.2018

Теги: PythonWeb-разработкаМодульПроцесс

Программа на Python может запускать другие программы с помощью функции Popen() (от process open) встроенного модуля subprocess. В качестве аргумента функция принимает имя программы, которую нужно запустить:

>>> import subprocess
>>> subprocess.Popen('C:\\Windows\\System32\\calc.exe')
<subprocess.Popen object at 0x0000020B18386438>

Возвращаемое значение представляет собой объект Popen, имеющий два полезных метода: poll() и wait().

Метод poll() возвращает значение None, если в момент его вызова процесс все еще выполняется. Если же процесс к этому моменту завершен, то он возвращает код завершения процесса. Код заверешения служит индикатором того, завершился ли процесс без ошибок (код равен нулю) или же его завершение было вызвано ошибкой (ненулевой код).

Метод wait() ожидает завершения запущенного процесса, прежде чем продолжить выполнение основной программы. Возвращаемым значением метода является целочисленный код завершения процесса.

>>> notepad = subprocess.Popen('C:\\Windows\\System32\\notepad.exe')
>>> notepad.poll() == None
True
>>> notepad.poll() == None
False
>>> notepad.wait()
0
>>> notepad.poll()
0

Сначала мы открываем процесс блокнота, затем проверяем, возвращает ли метод poll() значение None. Это означает, что процесс все еще выполняется. После этого закрываем блокнот и еще раз проверяем, возвращает ли метод poll() значение None. Теперь оба метода, wait() и poll() возвращают нулевое значение, что указывает на завершение программы notepad.exe без ошибок.

Передача аргументов командной строки

Процессам, создаваемым с помощью функции Popen(), можно передвать аргументы командной строки. Для этого функции Popen() надо передать список в качестве единственного аргумента. Первой строкой в этом списке должно быть имя исполняемого файла программы, которую надо запустить. Все последующие строки — это аргументы командной строки, которые будут переданы программе при запуске.

>>> subprocess.Popen(['C:\\Windows\\System32\\notepad.exe', 'C:\\example\\readme.txt'])
<subprocess.Popen object at 0x0000020B18386630>

Здесь мы не только запускаем приложение notepad.exe, но и открываем файл readme.txt.

Открытие файлов программ по умолчанию

Двойной клик на иконке файла с расширением .txt позволяет автоматически запустить приложение, ассоциированное с этим расширением. Функция Popen() также может открывать файлы подобным образом:

>>> subprocess.Popen(('start', 'C:\\example\\readme.txt'), shell = True)
<subprocess.Popen object at 0x0000020B183EDE10>

В каждой операционной системе есть программа, выполняющая те же функции, что и двойной клик на иконке файла. В Windows это программа start, в Ubuntu Linux — программа see.

Именованный аргумент shell = True нужен только для ОС Windows.
# Таймер обратного отсчета

import time, subprocess

wait = 10
while wait > 0:
    print(wait, end='')
    time.sleep(1)
    wait = wait - 1

# Воспроизведение звукового файла по завершении обратного отсчета
subprocess.Popen(['start', 'C:\\example\alarm.wav'], shell = True)

Поиск: Python • Web-разработка • Модуль • Процесс

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.