52

Интересный Python #10: CLI-приложения

CLI-приложение (Command Line Interface) - это такое приложение, в котором все действия осуществляются с помощью командной строки, в которую вводятся команды и параметры.

Интересный Python #10: CLI-приложения Программирование, Python, IT, Обучение, Длиннопост

Пример для Windows:

1. Откройте командную строку. Для этого нажмите Win + R, в открывшемся окне напишите cmd и от души приложитесь по кнопке Enter;

2. Введите команду tasklist и нажмите Enter. Вы увидите список запущенных процессов, их идентификаторы и объём памяти, которые они занимают;

3. Выполните команду tasklist /fi "memusage gt 200000", то есть добавьте к tasklist параметр /fi "memusage gt 200000". Вы увидите список процессов, занимающих в памяти более 200 000 килобайт.


Ну а если вы уже знакомы с Git, Docker и другими инструментами, то с их CLI вы наверняка имели дело.


С помощью библиотеки click вы легко сможете создавать свои CLI-приложения. В конце поста, как и всегда, будет тренировочное задание. Приятного чтения :)

Как установить click

1. Откройте терминал (командную строку);

2. Если умеете пользоваться виртуальным окружением, то создайте и активируйте его. Если нет, то пропустите этот шаг;

3. Выполните команду pip install click.

Документация

У click очень подробная и качественная документация. Ознакомиться с ней можно здесь.

В уроке мы рассмотрим лишь самые базовые возможности, но click - это очень мощная библиотека с обширной функциональностью. Она позволяет управлять вводом и выводом в консоль по аналогии с библиотеками, рассмотреными в прошлых уроках. Так что очень рекомендуем заглянуть в документацию, чтобы сформировать полное представление о том, что такое click.

Интересный Python #10: CLI-приложения Программирование, Python, IT, Обучение, Длиннопост
Интересный Python #10: CLI-приложения Программирование, Python, IT, Обучение, Длиннопост
Дальше будет много примеров кода. На Пикабу они выкладываются в виде скриншотов. Забрать их в виде текста можно здесь.

Вот так выглядит простейшее консольное приложение на click:

Интересный Python #10: CLI-приложения Программирование, Python, IT, Обучение, Длиннопост

Запустите командную строку и выберите ту директорию, в которой содержится ваш скрипт с расширением .py. Сменить директорию можно с помощью команды cd.

Интересный Python #10: CLI-приложения Программирование, Python, IT, Обучение, Длиннопост

Выполните несколько раз команду python main.py. Вместо main.py должно быть имя вашего скрипта. Каждый раз вы увидите в консоли новое случайное число.

Интересный Python #10: CLI-приложения Программирование, Python, IT, Обучение, Длиннопост
Интересный Python #10: CLI-приложения Программирование, Python, IT, Обучение, Длиннопост
Интересный Python #10: CLI-приложения Программирование, Python, IT, Обучение, Длиннопост

Аргументы - это обязательные параметры, которые должны идти в определённом порядке. Передаются по позиции, то есть имя аргумента при передаче не указывается.


Опции - это необязательные параметры, которые могут идти в любом порядке. Передаются по имени, выглядят как --option-name [value].


Общий вид: command [options] <arguments>. То есть сначала передаются все опции, потом все аргументы.


Аргументы и опции добавляются к команде с помощью декораторов @click.argument и @click.option.

Интересный Python #10: CLI-приложения Программирование, Python, IT, Обучение, Длиннопост

Теперь использовать скрипт можно так:

Интересный Python #10: CLI-приложения Программирование, Python, IT, Обучение, Длиннопост
Интересный Python #10: CLI-приложения Программирование, Python, IT, Обучение, Длиннопост
Интересный Python #10: CLI-приложения Программирование, Python, IT, Обучение, Длиннопост

Отдельный вид опций - это флаги. Для них не нужно указывать никакого конкретного значения, они либо есть, либо их нет. Во многих консольных приложениях используется флаг --verbose («многословный»). Давайте сделаем так, чтобы при наличии такого флага в консоль выводилось не только число, но и небольшое сообщение.

Интересный Python #10: CLI-приложения Программирование, Python, IT, Обучение, Длиннопост

Теперь использовать скрипт можно так:

Интересный Python #10: CLI-приложения Программирование, Python, IT, Обучение, Длиннопост
Интересный Python #10: CLI-приложения Программирование, Python, IT, Обучение, Длиннопост
Интересный Python #10: CLI-приложения Программирование, Python, IT, Обучение, Длиннопост

click автоматически добавляет команду --help, которая выводит в консоль справочную информацию по командам, зарегистрированным с помощью @click.command. Попробуйте выполнить ваш скрипт с флагом --help, и вы увидите следующее:

Интересный Python #10: CLI-приложения Программирование, Python, IT, Обучение, Длиннопост

При регистрации опции можно передать аргумент help, в котором будет содержаться справочная информация об этой опции.

Для аргументов справочную информацию указывать нельзя.

Интересный Python #10: CLI-приложения Программирование, Python, IT, Обучение, Длиннопост
Интересный Python #10: CLI-приложения Программирование, Python, IT, Обучение, Длиннопост

Напишите CLI-приложение, которое будет принимать в качестве аргумента строку и подсчитывать количество уникальных букв в нём.

Например, для строки 'Мама мыла раму' приложение выведет следующий результат:

Интересный Python #10: CLI-приложения Программирование, Python, IT, Обучение, Длиннопост

Если передан флаг --ignore-case (игнорировать регистр символов), то результат должен быть таким:

Интересный Python #10: CLI-приложения Программирование, Python, IT, Обучение, Длиннопост

А если ещё и передан флаг --sort, то таким:

Интересный Python #10: CLI-приложения Программирование, Python, IT, Обучение, Длиннопост

Обратная связь

Как и всегда, буду рад видеть ваши решения в комментариях. По каждому из них будет предоставлена обратная связь от наших код-ревьюеров.


Код нужно обязательно представить в 2 форматах:

- изображение, сгенерированное на https://carbon.now.sh/;

- ссылка на код, сгенерированная через codepile.net или аналогичный сервис.

Программирование на python

885 постов11.9K подписчиков

Правила сообщества

Публиковать могут пользователи с любым рейтингом. Однако!


Приветствуется:

• уважение к читателям и авторам

• конструктивность комментариев

• простота и информативность повествования

• тег python2 или python3, если актуально

• код публиковать в виде цитаты, либо ссылкой на специализированный сайт


Не рекомендуется:

• допускать оскорбления и провокации

• распространять вредоносное ПО

• просить решить вашу полноценную задачу за вас

• нарушать правила Пикабу