Python-скрипт как «команда»
#!/usr/bin/env python3
Все знают, что при написании Python-скриптов в Linux можно добавить такую строку shebang в первую строку, не так ли? Однако многие, похоже, не утруждают себя добавлением shebang. Вероятно, они думают: «Разве это не просто избавляет от необходимости вводить команду python3? Я могу и сам напечатать это.»
Если это просто «функция для сокращения набора текста», то, честно говоря, она не особо впечатляет. Но если сформулировать это так, ситуация меняется:
«Техника маскировки моего кода на 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-код и ввести название своего кода прямо в терминале. Ощущение, которое вы почувствуете на кончиках пальцев, и есть суть этой техники.
Читайте также