Вы слышали о подпрокат Модуль в стандартной библиотеке Python, не так ли? Как это:
Позволяет создавать новые процессы, подключаться к их трубам ввода/вывода/ошибки и получить их коды возврата.
Мало того, что это также намерено заменить более старые модули и функции, такие как os.system.
и ОС.spawn *
Что, честно говоря, у меня нет опыта использования.
В основном, модуль подпроцесса позволяет запустить другие программы из вашего кода и водить их на любой конец вы желаете. Подумайте о хороших вещах, таких как:
- Управляющий браузер из вашего кода через WebBrowser Модуль или даже третья сторонняя библиотека, как селен
- Автоматизация развертывания сервера или задачи администрирования с Ткань
- Запуск эмулятора Android из вашего кода.
- Да, я имею в виду, вы понимаете идею!
Документация У всех нужна вся информация, если вы хотите глубоко погружение. Если это ты, спасибо за наступление:)
Те из нас, которые просто хотят стоять на берегу реки и совок, некоторые воды являются теми, кто читает это предложение, а также под ним.
Помимо шутит, что привело нас к этому вопросу, это то, что у меня есть пара репозиториев, на которых я сотрудничаю с другими коллегами. Все эти 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”