Перейти к основному содержимому

Полезные фичи

Автоматизация повседневных задач снижает рутину и ошибки: один раз описали сценарий — дальше он выполняется одинаково на любой машине команды. Ниже — проверенные приёмы: от mkdir и шаблонов проектов до хуков Git и фоновых сервисов.

Загрузка демо автоматизации…

1. Генерация файлов и структур проектов

Быстрое создание дерева каталогов:

mkdir -p src/{controllers,models,views} && touch src/main.py README.md .gitignore

cookiecutter — шаблоны на Jinja2:

pip install cookiecutter
cookiecutter https://github.com/audreyr/cookiecutter-pypackage

Yeoman (yo) — экосистема генераторов для веба. Нативные генераторы: cargo new, dotnet new, npx create-react-app.


2. Пакетные операции с файлами

# 10 пустых файлов
for i in {1..10}; do touch "test_$i.txt"; done

# переименование расширений
for f in *.JPG; do mv "$f" "${f%.JPG}.jpg"; done

# удаление по маске
find . -type f -name "*.tmp" -delete

# сжатие списка
ls *.log | xargs gzip

3. Шаблонизация конфигураций

envsubst — подстановка переменных окружения:

export DB_HOST=localhost
echo 'host=$DB_HOST' | envsubst > config.txt

j2cli — рендер Jinja2 из YAML/JSON:

pip install j2cli
j2 config.j2 variables.yml > config.out

4. Автоматизация через Make и just

Makefile — «команды проекта» с зависимостями:

.PHONY: clean setup run

setup:
python -m venv venv
venv/bin/pip install -r requirements.txt

run: setup
venv/bin/python app.py

clean:
rm -rf __pycache__ *.pyc venv

just — современная альтернатива с простым justfile (cargo install just / brew install just).


5. Windows: PowerShell и AutoHotkey

1..5 | ForEach-Object { New-Item "file_$_.txt" -ItemType File }

AutoHotkey — макросы и автоматизация GUI на Windows.


6. Инструменты рабочего места

УтилитаЗачем
fzf + fdИнтерактивный поиск файлов и быстрый запуск
direnv.envrc в каталоге — переменные при cd
zoxideПрыжок в частые директории: z project

Пример:

fd . py | fzf | xargs vim
eval "$(direnv hook bash)"

7. Скрипты на Python

from pathlib import Path

root = Path('project')
(root / 'src').mkdir(parents=True, exist_ok=True)
(root / 'README.md').touch()

pathlib надёжнее конкатенации строк путей на разных ОС.


8. Git Hooks и pre-commit

Локальный hook .git/hooks/pre-commit:

#!/bin/sh
black --check . || { echo "Запустите black"; exit 1; }

Удобнее фреймворк pre-commit — единый .pre-commit-config.yaml для всей команды:

repos:
- repo: https://github.com/psf/black
rev: 24.4.2
hooks:
- id: black

pre-commit install — и проверки запускаются перед каждым коммитом.


9. Запуск по изменению файлов

entr — перезапуск при сохранении:

find . -name "*.py" | entr python -m pytest

watchexec — кроссплатформенный watch:

watchexec -e py "python app.py"

10. Системные сервисы (демоны)

Linux — unit systemd:

[Service]
ExecStart=/usr/bin/python3 /opt/myscript.py
Restart=always
sudo systemctl enable --now myscript.service

macOS — LaunchAgent (см. Планировщики). Планировщик ОС — когда нужен не watch, а строгое расписание.


Как выбрать уровень автоматизации

ЗадачаИнструмент
Разовая операция с файламиshell, Python
Повторяемые команды в репоMake / just / npm scripts
Качество перед коммитомpre-commit
Перезапуск при правкахentr / watchexec
Ночной бэкапcron / systemd timer / Task Scheduler

:::tip С чего начать Оформите в Makefile три цели: setup, test, run. Добавьте pre-commit с форматтером. Остальное подключайте по мере роста проекта. :::

См. также

Другие статьи этого же раздела в боковом меню (как на странице «О разделе»).