Почему стоит использовать Python для скриптов

В программировании мы часто выбираем самый простой инструмент, который решает задачу. Но простой выбор не всегда лучший, особенно если скрипту предстоит работать на разных компьютерах.

Проблема: Bash-скрипты не везде одинаково работают

Покажем на примере стандартного shell-скрипта, который:

  1. Находит корневую папку проекта

  2. Удаляет старые артефакты сборки

  3. Обновляет файл версии

  4. Запускает сборку

SCRIPT_PATH="$(readlink -f "$0")"
PROJECT_ROOT="$(dirname "${SCRIPT_PATH}")"
cd "${PROJECT_ROOT}"

find build gen -type f \( -name '*.o' -o -name '*.a' \) \
  -print0 | xargs -0 -r rm

BUILD_DATE="$(date -d 'now' +%F)"
cp version.template build/version.txt
sed -i "s/@VERSION@/${COMMIT_TAG:-dev}/" build/version.txt
sed -i "s/@BUILD_DATE@/${BUILD_DATE}/" build/version.txt

Проблема в том, что такой код работает на Linux, но может не работать на macOS, потому что:

  • Утилиты readlink, find, xargs, date, sed ведут себя по-разному или отсутствуют

  • Различия между GNU (Linux) и BSD (Mac) версиями инструментов приводят к ошибкам

Короче, что работает на вашем компьютере, может сломаться у коллеги или в CI/CD.


Было бы лучше использовать Python

Автор оригинальной статьи предлагает заменить сложные bash-скрипты на Python-скрипты. Почему?

1) Python есть почти везде

Python 3 сейчас установлен на большинстве систем, что означает, что ваши скрипты будут запускаться везде одинаково.

2) Многие разработчики уже знакомы с ним

Даже если вы не писали на Python в больших проектах, вы, скорее всего, уже видели его код или использовали простые скрипты, что снижает барьер вовлечения.

3) Большая стандартная библиотека

Python поставляется с обширной стандартной библиотекой, включающей всё, что нужно для скриптов:

  • работа с файлами,

  • JSON/XML,

  • сетевые запросы,

  • управление временем,

  • sqlite и др.

Это упрощает код и делает его кроссплатформенным без сторонних зависимостей.

4) Код проще читать

Автор отмечает, что Python-код легче понять и поддерживать, чем сложные конструкции Bash. Приводится сравнение трансформацию списка строк:

В Bash:

morning_greetings=('hi' 'hello' 'good morning')
energetic_morning_greetings=()

for s in "${morning_greetings[@]}"; do
  energetic_morning_greetings+=( "${s^^}!" )
done

В Python:

morning_greetings = ['hi', 'hello', 'good morning']
energetic_morning_greetings = [
    s.upper() + '!' for s in morning_greetings
]

Python-версия короче и понятнее даже тем, кто редко пишет такие вещи.


Когда это особенно важно

Это не значит, что обязательно нужно переписывать все простые скрипты в Python. Небольшие однострочные Bash-функции вполне нормальны. Но когда, скрипт становится длинным, логика сложная и скриптам нужна кросс-платформенность, то Python подойдет гораздо лучше.


Подведя итоги

Перейти от Bash к Python-скриптам стоит когда:

  • Вы хотите, чтобы код работал одинаково на разных системах

  • Легко читать и поддерживать чужие скрипты

  • Хотите воспользоваться мощной стандартной библиотекой

  • Скрипты становятся сложнее, чем "10 строк"

Похожие статьи

Рекомендательные технологии Подробнее

Как отключить SELinux на Ubuntu, CentOS, Debian и RHEL

Подробная инструкция по проверке, временной и постоянной деактивации SELinux на популярных Linux-дистрибутивах: Ubuntu, Debian, CentOS и RHEL. Объяснены способы через консоль и конфигурационные файлы.

Laravel 13.9.0: генерация passwordrules и улучшения очередей

Laravel 13.9.0 добавляет генерацию HTML passwordrules из Password validation rules, улучшения очередей и поддержку хранения больших SQS payload на диске. Также обновление включает новые возможности для dispatch, миграций и contextual attributes.

NativePHP для мобильных приложений стал полностью бесплатным

NativePHP for Mobile с версии v3 стал полностью бесплатным и открытым, с переходом на плагинную архитектуру, новым инструментом Jump для тестирования и другими нововведениями для разработчиков на Laravel.

Правила rewrite URL в NGINX

Разбор директив rewrite и return в NGINX с примерами редиректов, обработки URL и настройки маршрутов для Laravel и других приложений. В статье показаны основные флаги rewrite, использование регулярных выражений и типовые конфигурации.