Найти в Дзене
Записки сисадмина

Python. Запускаем скрипт с аргументами и вызываем Exception.

Как-то пришел ко мне один знакомый со словами «А я тут купил онлайн курс по программированию на Python с нуля». Обычно, с такого начинаются самые интересные истории из разряда «Как войти в Айти». Не буду поливать сейчас грязью все эти курсы и онлайн школы. Просто дам один маленький совет: до обучения решите, к чему у Вас больше лежит душа. Программист на Python - это не системный администратор, которому нужен Python. Вроде бы язык один и тот же, а вот функционал используется, зачастую, разный. Разберем ситуацию на простой задаче: Напишем простой python скрипт, который должен принимать в себя два аргумента от пользователя. И вот, ты - рядовой джун программист решаешь эту проблему так, как тебя учили на курсах - через input(). Работает? Конечно! Принимает в себя всегда ровно два аргумента? Конечно! Запускается из консоли? Да! Усложним задачу: Нам нужно добавить этот скрипт в планировщик (скажем, cron) и запускать его в разное время с разными аргументами. Вот тут и проявляется огромная р

Как-то пришел ко мне один знакомый со словами «А я тут купил онлайн курс по программированию на Python с нуля». Обычно, с такого начинаются самые интересные истории из разряда «Как войти в Айти».

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

Разберем ситуацию на простой задаче:

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

И вот, ты - рядовой джун программист решаешь эту проблему так, как тебя учили на курсах - через input().

-2

Работает? Конечно! Принимает в себя всегда ровно два аргумента? Конечно! Запускается из консоли? Да!

-3

Усложним задачу:

Нам нужно добавить этот скрипт в планировщик (скажем, cron) и запускать его в разное время с разными аргументами.

Вот тут и проявляется огромная разница между программистом и системным администратором. Программист не выйдет за рамки своей IDE, ему никогда не поставят подобную задачу (я сейчас говорю про начинающий уровень).

В этот момент можно передать привет всем, кто пишет скрипты на bash. Для вас это самая типичная ситуация, вы сразу держите в голове $1, $2 и т.д.

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

-4
  • На помощь нам приходит библиотека sys и ее метод argv.
-5
-6

Мы видим, что sys.argv принимает любое количество аргументов и создает из них список. Первым элементом списка всегда будет имя запущенного файла.

  • Все супер, но мы помним, что нам нужно именно два аргумента - не больше, и не меньше.

Увы, придется обрабатывать это условие внутри самого скрипта:

-7
-8

И вот на этом моменте мы сталкиваемся со второй проблемой, которой не учат на курсах.

  • Нам нужно по логике останавливать работу скрипта, если мы получили неправильное количество аргументов.

Можно оставшиеся print'ы вывести под else. Функционал будет рабочим, но так делать не стоит. Не нужно строить дальнейшую логику скрипта под одним условием.

  • Ранее, мы уже обрабатывали Exceptions, используя конструкцию try/except. Теперь настало время побыть с другой стороны: мы будем сами вызывать Exception.
-9
-10

Теперь наш скрипт не станет выполняться, если не отработает условие. Однако, выкидывать простой Exception тоже не принято. Список всех доступных исключений и ошибок можете посмотреть в официальной документации Python. В нашем же случае больше подойдет TypeError.

-11
  • Проверяем, что все работает как надо:
-12
  • Дальнейшую логику можете уже дописать под свое ТЗ. Важно помнить: все аргументы, полученные в sys.argv становятся строками:
-13
-14