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

Как создавать свои собственные программы командной строки в Python с помощью Click

Как создавать свои собственные программы командной строки в Python с помощью Click

Click — это пакет Python для написания интерфейсов командной строки. Он создает прекрасную документацию для вас и позволяет создавать интерфейсы командной строки всего за одну строку кода. Короче говоря, это здорово и может помочь поднять ваши программы на новый уровень.

Вот как вы можете использовать его для оживления ваших проектов Python.

Написание программ командной строки без клика

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

Нет ничего плохого в написании собственного кода, и это отличный способ изучения Python, но Click позволяет вам следовать принципам «не повторяйся» (DRY). Без Click вы напишите код, который хрупок и требует значительного обслуживания при любых изменениях.

Вот простой интерфейс командной строки, кодированный без Click:

import sys import random def do_work(): """ Function to handle command line usage""" args = sys.argv args = args[1:] # First element of args is the file name if len(args) == 0: print('You have not passed any commands in!') else: for a in args: if a == '--help': print('Basic command line program') print('Options:') print(' --help -> show this basic help menu.') print(' --monty -> show a Monty Python quote.') print(' --veg -> show a random vegetable') elif a == '--monty': print('What\'s this, then? "Romanes eunt domus"? People called Romanes, they go, the house?') elif a == '--veg': print(random.choice(['Carrot', 'Potato', 'Turnip'])) else: print('Unrecognised argument.') if __name__ == '__main__': do_work() 

Пример интерфейса командной строки Python

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

Вот та же логика с Click:

 import click import random @click.command() @click.option('--monty', default=False, help='Show a Monty Python quote.') @click.option('--veg', default=False, help='Show a random vegetable.') def do_work(monty, veg): """ Basic Click example will follow your commands""" if monty: print('What\'s this, then? "Romanes eunt domus"? People called Romanes, they go, the house?') if veg: print(random.choice(['Carrot', 'Potato', 'Turnip'])) if __name__ == '__main__': do_work() 

В этом примере Click реализована та же логика в 16 строках кода. Для вас разбираются аргументы, и создается экран справки:

Python Click автоматически сгенерированный экран справки

Это базовое сравнение показывает, сколько времени и усилий вы можете сэкономить, используя такие программы, как Click. Хотя интерфейс командной строки может казаться одинаковым для конечного пользователя, базовый код проще, и вы сэкономите много времени на кодировании. Любые изменения или обновления, которые вы напишите в будущем, также значительно увеличат время разработки.

Начало работы с Click for Python

Перед использованием Click вы можете настроить виртуальную среду. Это остановит конфликты ваших пакетов Python с системным Python или другими проектами, над которыми вы, возможно, работаете. Вы также можете попробовать Python в своем браузере. если вы хотите поиграть с Python и нажмите.

Когда все будет готово, установите Click из командной строки, используя PIP ( как установить PIP для Python ):

 pip install click 

Написание вашей программы первого клика

В текстовом редакторе начните с импорта Click:

 import click 

После импорта создайте метод и основную точку входа. В нашем руководстве по Python OOP они рассматриваются более подробно, но они предоставляют место для хранения вашего кода и способ запуска Python:

 import click import random def veg(): """ Basic method will return a random vegetable""" print(random.choice(['Carrot', 'Potato', 'Turnip', 'Parsnip'])) if __name__ == '__main__': veg() 

Этот очень простой скрипт выведет случайный овощ. Ваш код может выглядеть по-другому, но этот простой пример идеально подходит для сочетания с Click.

Сохраните это как click_example.py , а затем запустите его в командной строке (после перехода к его местоположению):

 python click_example.py 

Вы должны увидеть случайное название овоща. Давайте улучшим вещи, добавив Click. Измените код, включив декораторы Click и цикл for :

 @click.command() @click.option('--total', default=3, help='Number of vegetables to output.') def veg(total): """ Basic method will return a random vegetable""" for number in range(total): print(random.choice(['Carrot', 'Potato', 'Turnip', 'Parsnip'])) if __name__ == '__main__': veg() 

После запуска вы увидите случайный овощ, отображаемый три раза.

Давайте разберем эти изменения. Декоратор @ click.command () настраивает Click для работы с функцией, следующей сразу за декоратором. В данном случае это функция veg () . Это необходимо для каждого метода, который вы хотите использовать с Click.

Декоратор @ click.option настраивает щелчок для принятия параметров из командной строки, которые он передает вашему методу. Здесь используются три аргумента:

  1. –Total: это имя командной строки для общего аргумента.
  2. default: если вы не укажете общий аргумент при использовании скрипта, Click будет использовать значение по умолчанию.
  3. help: краткое предложение, объясняющее, как использовать вашу программу.

Давайте посмотрим Нажмите в действии. Из командной строки запустите ваш скрипт, но передайте итоговый аргумент так:

 python click_example.py --total 10 

Установив –total 10 из командной строки, ваш скрипт напечатает десять случайных овощей.

Если вы передадите флаг –help , вы увидите красивую страницу справки вместе с опциями, которые вы можете использовать:

 python click_example.py --help 

Python Нажмите справку

Добавление дополнительных команд

Можно использовать много Click декораторов для одной и той же функции. Добавьте еще одну опцию щелчка к функции veg :

 @click.option('--gravy', default=False, help='Append "with gravy" to the vegetables.') 

Не забудьте передать это в метод:

 def veg(total, gravy): 

Теперь, когда вы запускаете свой файл, вы можете передать флаг подливки :

 python click_example.py --gravy y 

Экран справки также изменился:

Экран справки Python Click

Вот весь код (с небольшим рефакторингом для аккуратности):

 import click import random @click.command() @click.option('--gravy', default=False, help='Append "with gravy" to the vegetables.') @click.option('--total', default=3, help='Number of vegetables to output.') def veg(total, gravy): """ Basic method will return a random vegetable""" for number in range(total): choice = random.choice(['Carrot', 'Potato', 'Turnip', 'Parsnip']) if gravy: print(f'{choice} with gravy') else: print(choice) if __name__ == '__main__': veg() 

Еще больше параметров клика

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

Создайте новый файл с именем click_example_2.py . Вот стартовый код, который вам нужен:

 import click import random @click.command() def add(): """ Basic method will add two numbers together.""" pass if __name__ == '__main__': add() 

Здесь нет ничего нового. В предыдущем разделе этот код подробно описан. Добавьте @ click.option с названием numbers :

 @click.option('--numbers', nargs=2, type=int, help='Add two numbers together.') 

Единственный новый код здесь — это nargs = 2 и опции type = int . Это говорит Click, чтобы принять два значения для опции чисел , и что они оба должны быть целыми числами типа. Вы можете изменить это на любой номер или (действительный) тип данных, который вам нравится.

Наконец, измените метод add, чтобы он принимал аргумент numbers , и выполните с ними некоторую обработку:

 def add(numbers): """ Basic method will add two numbers together.""" result = numbers[0] + numbers[1] print(f'{numbers[0]} + {numbers[1]} = {result}') 

Каждое передаваемое вами значение доступно через объект чисел . Вот как использовать его в командной строке:

 python click_example_2.py --numbers 1 2 

Python Click Nargs Результат

Click является решением для утилит Python

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

Если вы ищете какие-то проекты на Python, с помощью которых вы можете практиковать свои новые найденные навыки, почему бы не узнать, как управлять Arduino с помощью Python управлять Arduino с помощью Python управлять Arduino с или о чтении и записи в Google Sheets с Python ? Любой из этих проектов будет идеальным для преобразования в Click!

Похожие посты
Программирование

Что такое канал RSS? (И где его взять)

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

7 причин, почему изображения не загружаются на ваш сайт

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

Запустите агент SQL Server: настройте SQL Server 2012

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

15 лучших бесплатных обоев дня Святого Патрика