Выбор библиотеки разбора аргументов командной строки ===================================================== Этот документ описывает выбор библиотеки для разбора аргументов командной строки. Назначение: реализация команды "grep" в нашем мини-cli. Необходимые возможности команды: * поддерживать ключи * -i (нечувствительность к регистру), * -w (поиск только слов целиком), * -A n (распечатать n строк после строки с совпадением); * поддерживать регулярные выражения в строке поиска; Рассмотренные библиотеки: #. argparse https://docs.python.org/3/library/argparse.html #. getopt https://docs.python.org/3.6/library/getopt.html #. docopt http://docopt.org/ #. click http://click.pocoo.org/6/ argparse и getopt поставляются в стандартной библиотеке Python. Впрочем, про getopt написано, что она предназначена для тех, кто использовал похожую библиотеку на языке С. Поэтому в дальнейшем **getopt я не рассматривал**. Я прочёл сравнительный обзор оставшихся библиотек (argparse, docopt, click) https://realpython.com/blog/python/comparing-python-command-line-parsing-libraries-argparse-docopt-click/. Также почитал документацию (не полностью) для каждой библиотеки. Плюсы и минусы библиотек (по моему мнению, применительно к данной задаче и уже написанной части кода cli): #. argparse * `+` я имею опыт работы с этой библиотекой * `+` не является внешней зависимостью, так как включена в стандартную библиотеку * `+` много документации, с примерами * `-` нужно писать много кода (по сравнению с другими вариантами) #. docopt * `+` можно декларативно написать, какое поведение ожидается от парсера * `+` получаем дополнительную документацию саму собой * `-` давно не обновлялась * `-` нужно писать код, проверяющий, что всё распарсилось и что типы соответствуют * `-` неочевидно, что делать, если use-case сложный #. click * `+` видел отзывы в интернете, что эта библиотека самая хорошая * `-` не смог прочесть документацию. Она написана, казалось бы, неплохо, но мне сложно её читать. Она описывает use-case, которые мне не интересны, да ещё и в непонятном порядке click я больше не стал рассматривать, так как не смог в нём разобраться. Возможно, это действительно хорошая библиотека и стоит её рассмотреть ещё раз при необходимости. Из оставшихся двух вариантов - argparse и docopt - я выбрал docopt. Он лучше вписывается в то обилие документации, которое уже есть в проекте. К тому же, сценарий использования в случае grep довольно простой, поэтому docopt справится. Плюс, хочется попробовать что-то новое, но без ущерба результату.