Python-скрипт как «команда»

#!/usr/bin/env python3

Все знают, что при написании Python-скриптов в Linux можно добавить такую строку shebang в первую строку, не так ли? Однако многие, похоже, не утруждают себя добавлением shebang. Вероятно, они думают: «Разве это не просто избавляет от необходимости вводить команду python3? Я могу и сам напечатать это.»

Если это просто «функция для сокращения набора текста», то, честно говоря, она не особо впечатляет. Но если сформулировать это так, ситуация меняется:

«Техника маскировки моего кода на Python под нативную команду Linux»

Это звучит довольно заманчиво, не правда ли?

процесс pipi с Python-скриптом в Linux


Момент, когда Python-скрипт становится «инструментом»

Эта одна строка:

#!/usr/bin/env python3

Если вы понимали это просто как «указание пути к Python», то до сих пор вы просто выполняли код.

Но с того момента, как вы начинаете использовать это правильно, 👉 вы добавляете новый инструмент в систему.

Разница намного больше, чем кажется.


1. Разрываем оковы расширения .py

Мы по привычке пишем так:

python3 crawler.py

Это похоже на следующее:

«Это файл Python… пожалуйста, запустите его с помощью Python…»

Довольно пассивно, не так ли?

Однако, если добавить shebang и дать права на выполнение командой chmod +x, расширение становится ненужным.

./crawler

Тон совершенно меняется.


Фокус на функциональности, а не на языке

crawler
backup
log-cleaner
notify

Теперь вам становится неважно, являются ли эти файлы:

  • Python-скриптами

  • С-программами

  • Go-программами

То есть, вы концентрируетесь на функциональности самого скрипта, а не на языке, на котором был реализован инструмент. Эта психологическая разница ощущается довольно сильно, если попробовать самому.

Мой код больше не:

  • script.py,

  • а одна из команд Linux.

Чувство, будто мой код стоит рядом с ls, grep, awk.

Это первое удовольствие.


2. Естественно вписывается в конвейер

Лично я считаю, что настоящая мощь Linux заключается в символе | (пайп). Среди бесчисленных преимуществ Linux, существование этого пайпа — просто великолепно.

Соединение команд 👉 для создания единого потока

Если бы этот прекрасный конвейер был создан из скриптов без shebang, это выглядело бы так:

cat access.log | python3 parser.py | python3 filter.py

Что-то… поток прерывается.

  • «А, это Python»
  • «Опять интерпретатор»

Постоянно отвлекает.

Однако скрипт с shebang будет выглядеть так:

cat access.log | parser | filter | notifier

Или

ps aux | my-filter | sort | uniq

Разве ощущения не меняются?

Поток не прерывается

  • Получаем ввод

  • Обрабатываем

  • Передаём дальше

Кажется, что все естественно продолжается.

Немного преувеличивая, могу сказать, что чувствуешь себя не просто «Python-скриптом», а фильтром, следующим философии Unix. И кажется, что мой код переместился из мира Python в мир Linux.

3. Создаём свои команды Linux на Python легко и просто

Конечно, для простой автоматизации в Linux первым делом на ум приходят Bash-скрипты. Они позволяют использовать системные команды, как свои собственные, без установки дополнительных пакетов (импорта).

Но давайте будем честны с собой. Когда условия становятся сложнее и приходится работать со структурами данных, код на Bash быстро превращается в «нечитаемую головоломку», которую не хочется открывать потом. Разве вы не чувствовали разочарования, когда открывали код через несколько месяцев для обслуживания, хотя при написании он казался простым и понятным?

Вот тут-то и проявляется истинная ценность Python.

  • Победа читаемости: То чувство облегчения, когда вы открываете файл для обслуживания через несколько месяцев. Python любезно объясняет, о чём я думал в прошлом.

  • Мощная экосистема пакетов: Сложные вызовы API или обработка данных завершаются всего за несколько строк благодаря продвинутым пакетам Python. Пока вы боретесь с Bash, на Python вы уже закончите реализацию и сможете пить кофе.

В конечном итоге, стратегия такова: «логика создаётся с производительностью Python, а выполнение — с простотой нативных команд Linux».

Удалите .py, дайте права на выполнение командой chmod +x, а затем незаметно поместите этот файл куда-нибудь в PATH. И наблюдайте, как ваш код работает, когда вы просто вводите одно слово в терминале, например, deploy.

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


Заключение

Shebang — это не просто мелкий синтаксис.

#!/usr/bin/env python3

Я бы сказал, что это не просто путь выполнения, а декларация, изменяющая роль скрипта на команду.

Дорогие читатели, попробуйте добавить shebang в свой Python-код и ввести название своего кода прямо в терминале. Ощущение, которое вы почувствуете на кончиках пальцев, и есть суть этой техники.

Читайте также