Рубрики
Без рубрики

Автоматизировать самую скучную вещь с модулем подпроцесса Python

Ленивое введение в модуль подпроцесса Питона. Помечено Python, подпроцесс, автоматизировать.

Вы слышали о подпрокат Модуль в стандартной библиотеке Python, не так ли? Как это:

Позволяет создавать новые процессы, подключаться к их трубам ввода/вывода/ошибки и получить их коды возврата.

Мало того, что это также намерено заменить более старые модули и функции, такие как os.system. и ОС.spawn * Что, честно говоря, у меня нет опыта использования.

В основном, модуль подпроцесса позволяет запустить другие программы из вашего кода и водить их на любой конец вы желаете. Подумайте о хороших вещах, таких как:

  1. Управляющий браузер из вашего кода через WebBrowser Модуль или даже третья сторонняя библиотека, как селен
  2. Автоматизация развертывания сервера или задачи администрирования с Ткань
  3. Запуск эмулятора Android из вашего кода.
  4. Да, я имею в виду, вы понимаете идею!

Документация У всех нужна вся информация, если вы хотите глубоко погружение. Если это ты, спасибо за наступление:)

Те из нас, которые просто хотят стоять на берегу реки и совок, некоторые воды являются теми, кто читает это предложение, а также под ним.

Помимо шутит, что привело нас к этому вопросу, это то, что у меня есть пара репозиториев, на которых я сотрудничаю с другими коллегами. Все эти REPOS живут в Проекты подкаталог внутри моего домашнего каталога. Цель состоит в том, чтобы иметь возможность запускать Git Pull На всех этих репо в начале моего рабочего дня автоматически. Другая альтернатива будет в CD в каталог проекта, запустите git pull. , CD и в следующий и т. Д. Это, мои друзья, очень скучно!

Без намного дальше ADO, вот код:

from subprocess import check_output, CalledProcessError
from pathlib import Path

project_dir = Path.home() / 'Projects' / 'work'

for d in project_dir.iterdir():
    if d.is_dir(): # this check is not really needed
        try:
            out = check_output(["git", "pull", d], cwd=d)
            res = out.decode()
            print(res.splitlines()[-1])
        except CalledProcessError as exc:
            pass

В двух словах я прохожу все каталоги (REPOS) в моем рабочем каталоге, работающий Git Pull на них. Я также декодирую вывод (по умолчанию вывод находится в байтах), и печатает последний элемент в списке выходных данных (вызова RES.SplitLines превращает вывод в список). Если есть ошибка, я прохожу так, как будто не произошло.

Это все, поверьте мне! Я могу запустить этот маленький сценарий из любого места и у меня обновляется мои репо Может быть, я даже могу сделать это дальше, проверив вывод, чтобы увидеть, было ли действительно обновление на репо. Если это так, я могу открыть это конкретное репо в редакторе кода или в браузере. Но в чем смысл?

Оригинал: “https://dev.to/mekicha/automate-the-most-boring-thing-with-pythons-subprocess-module-1n9b”