Как создавать свои собственные программы командной строки в 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 и нажмите.

Наконец, убедитесь, что вы используете Python версии 3. Можно использовать Click с Python версии 2, но эти примеры приведены в Python 3. Узнайте больше о различиях между Python 2 и Python 3.

Когда все будет готово, установите 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 и за цикл:

@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.

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

  1. -Всего: Это имя командной строки для Всего аргумент.
  2. дефолт: Если вы не указали общий аргумент при использовании сценария, Click будет использовать значение по умолчанию.
  3. Помогите: Короткое предложение, объясняющее, как использовать вашу программу.

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

python click_example.py --total 10

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

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

python click_example.py --help

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

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

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

@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 называется чисел:

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

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

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

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?

или как насчет чтения и записи в Google Sheets с Python

? Любой из этих проектов идеально подходит для конвертации в Click!

Ссылка на основную публикацию
Adblock
detector