Python - Разница между docopt и argparse

Мне нужно написать интерфейс командной строки, и я видел, что могу использовать docopt и argparse.

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

Пожалуйста, придерживайтесь фактов. Я не хочу, Вау. docopt. Как прекрасно. Очень полезно.

Ответы

Ответ 1

Docopt анализирует строку doc, в то время как argparse создает свой синтаксический анализ, создавая экземпляр объекта и добавляя к нему поведение по вызову функций.

Пример для argparse:

parser = argparse.ArgumentParser()
parser.add_argument("operation", help="mathematical operation that will be performed", 
    choices=['add', 'subtract', 'multiply', 'divide'])
parser.add_argument("num1", help="the first number", type=int)
parser.add_argument("num2", help="the second number", type=int)
args = parser.parse_args()

Пример для docopt:

"""Calculator using docopt

Usage:
  calc_docopt.py <operation> <num1> <num2>
  calc_docopt.py (-h | --help)

Arguments:
  <operation>  Math Operation
  <num1>       First Number
  <num2>       Second Number

Options:
  -h, --help     Show this screen.

"""
from docopt import docopt

if __name__ == '__main__':
    arguments = docopt(__doc__, version='Calculator with docopt')
    print(arguments)

Примечание, что docopt использует разделы Usage: и Options: для синтаксического анализа. Здесь Arguments: предоставляется только для удобства конечного пользователя.

Ответ 2

argparse находится в библиотеке по умолчанию python, поэтому это не добавляет никаких дополнительных зависимостей к вашей программе. Различия в основном связаны с написанием кода. Используя argparse, вы можете добавить перемычки для плагинов, чтобы они могли добавлять свои собственные аргументы в вашу программу. Например flake8 использует это.

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

Ответ 3

Страница Почему для Клика:

https://click.palletsprojects.com/en/7.x/why/

имеет хорошее сравнение между argparse, docopt и click.

Click - еще одна утилита синтаксического анализа командной строки для Python.