Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.
А это две из восьми подборок моего канала канала о программировании на языке Python
Приложение 1 к видео
Модуль subprocess. Примеры с методами run и Popen
В данном приложении мы рассмотрим тот материал, который я излагал на видео-лекции. Для работы с процессами среди стандартных библиотек есть очень интересный модуль subprocess. Возможности этого модуля, на мой взгляд, более удобны, чем то, что мы до сих пор рассматривали.
Рассмотрим два интересных метода модуля subprocess. Сегодня мы вернёмся к примерам, рассмотренным на видео-уроке, а в следующем приложении мы остановимся на них подробнее.
Метод subprocess.run
Метод запускает указанную программу и ждёт окончание её работы. Параметры запускаемой программы указываются в виде элементов списка. Среди других опций команды особо отмечу параметр capture_output. Указав True мы получим, что весь вывод на стандартные устройства будут захвачены и затем при необходимости могут обработаны. По умолчанию вывод представляет собой байтовые строки, так что для дальнейшего использования их обычно декодируют в строки нужной кодировке. Метод run() возвращает результат как объект CompletedProcess. Для нас важны такие его компоненты как stdout и stderr.
Ниже представлена программа, запускающая команду ls, с соответствующими параметрами. Мы указываем, что весь стандартный вывод будет перехвачен. После выполнения команды мы перенаправляем стандартный вывод и стандартный вывод ошибок в файлы f1 и f2.
В результате выполнения программы будут созданы (или обновлены) два файла out и err с результатами работы программы ls.
Представленную выше программу можно значительно упростить, если сразу указать такие опции метода run, как stdout и stderr. При этом еще и увеличим производительность программы. При этом параметр capture_output по умолчанию будет равен False. Как видим (см. ниже) программа к тому же и короче.
Результат работы последней программы, естественно тот же, что и предыдущей.
Метод subprocess.Popen
В отличие от метода run метод Popen сразу после запуска указанного процесса возвращает управление, т.е. запущенный процесс будет выполняться в фоновом режиме по отношению к родительскому процессу. Метод возвращает объект Popen, который ряд интересных компонентов. В частности метод wait() ждёт завершение процесса, а с помощью poll() можно осуществлять опрос. Метод возвратит 0, если процесс закончил свою работу успешно или выдаст другое числовое значение. Если же возвращает None, то процесс, скорее всего, работает. Последний метод используется нами в программе ниже.
Данная программа выполняет те же действия, что что и две другие программы статьи. Кроме этого она также выводит индикатор ожидания (см. цикл while).
В следующем приложении мы продолжим заниматься библиотекой subprocess.
Хорошего программирования. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.