····import plac
····plac.call(hello)
Руководство по использованию выглядит так:
$ python hello.py — help
usage: hello.py [-h] name [capitalize] [repetitions]
Says hello to you.
positional arguments:
··name
··capitalize [False]
···repetitions [1]
optional arguments:
··-h, — help show this help message and exit
Если хотите выполнить преобразование типов для какого-нибудь аргумента до того, как передадите его в функцию, используйте декоратор annotations:
import plac
@plac.annotations(
····name = plac.Annotation("the name to greet", type=str),
····capitalize = plac.Annotation("use allcaps", kind="flag", type=bool),
····repetitions = plac.Annotation("total repetitions", kind="option",
··················type=int)
def hello(name, capitalize=False, repetitions=1):
··"""Здоровается с вами."""
····if capitalize:
········name = name.upper()
····for rep in range(repetitions):
········print('Hello {}'.format(name))
Помимо этого, декоратор plac.Interpreter предоставляет легковесный способ создать очень быстрое интерактивное приложение для командной строки. Примеры содержатся в документации к интерактивному режиму plac по адресу https://github.com/kennethreitz-archive/plac/blob/master/doc/plac_adv.txt.
Основное предназначение Click ( http://click.pocoo.org/) (расшифровывается как Command Line-Interface Creation Kit — набор для создания интерфейсов командной строки) — помочь разработчикам создать компонуемые интерфейсы командной строки, написав минимально возможное количество кода. Документация к Click подтверждает ее связь с docopt.
Функция Click — создавать компонуемые системы, функция docopt — вручную создавать самые красивые интерфейсы командной строки. Эти две цели конфликтуют друг с другом. Click мешает пользователям реализовывать некоторые шаблоны для того, чтобы сделать интерфейсы командной строки уникальными. Например, вы практически не можете переформатировать вспомогательные страницы.
Стандарты этой библиотеки способны удовлетворить почти все запросы разработчиков, но продвинутые пользователи могут изменить их. Как и в случае с Plac, она задействует декораторы, чтобы привязать определения анализатора к функциям, которые будут их использовать, переместив из самих функций управление аргументами командной строки.
Приложение hello.py при использовании Click выглядит так:
import click
@click.command()
@click.argument('name', type=str)
@click.option('-capitalize', is_flag=True)
@click.option('-repetitions', default=1,
··············help="Times to repeat the greeting.")
def hello(name, capitalize, repetitions):
····"""Здоровается, with capitalization и именем."""
····if capitalize:
········name = name.upper()
····for rep in range(repetitions):
········print('Hello {}'.format(name))
if __name__ == '__main__':
····hello()
Click анализирует описание из строк документации команды и создает вспомогательное сообщение с помощью пользовательского анализатора, унаследованного от устаревшего члена стандартной библиотеки optparse, который более совместим со стандартами POSIX, чем argparse [82] docopt не использует ни optparse, ни argparse и для анализа строк документации применяет регулярные выражения.
.
Вспомогательное сообщение выглядит так:
$ python hello.py — help
Usage: hello.py [OPTIONS] NAME
··Say hello, with capitalization and a name.
Options:
··-capitalize
··-repetitions INTEGER Times to repeat the greeting.
··-help Show this message and exit.
Реальная ценность Click заключается в ее модульности — вы можете добавить внешнюю функцию группировки, а затем любую другую функцию, декорированную с помощью click, в ваш проект, и они станут субкомандами для этой команды верхнего уровня:
Декоратор group() создает команды верхнего уровня, которые запускаются первыми (перед вызванной субкомандой).
С помощью декоратора pass_context (опционально) передаются объекты из сгруппированной команды в субкоманду, первый аргумент становится объектом click.core.Context.
Этот объект имеет специальный атрибут ctx.obj, который можно передавать субкомандам, использующим декоратор @click.pass_context.
Теперь вместо функции hello() вызывайте функцию, которая была декорирована @click.group(); в нашем случае это cli().
Библиотека Clint ( https://pypi.python.org/pypi/clint/) соответствует своему названию и является набором инструментов для работы с интерфейсами командной строки (Command-Line INterface Tools). Поддерживает такую функциональность, как раскрашивание CLI и добавление отступов, индикаторов выполнения, основанных на итераторах, допускает неявную обработку аргументов. Кроме того, это простое и мощное средство отображения столбцов. В этом примере показаны инструменты для раскрашивания и создания отступов:
Читать дальше