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.