2013-12-15 3 views
16

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

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

Обратите внимание на факты. Я не хочу Вау. docopt. Как прекрасно. Очень полезно.

+3

'argparse' находится в пакете Python по умолчанию, тогда как' docopt' является отдельным модулем. –

ответ

10

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: предоставляется только для удобства конечного пользователя.

+1

Возможно, год спустя, я думаю, стоит упомянуть, что, поскольку docopt довольно недавний, а не часть ядра python, он может быть недоступен в старых системах. т. е. это не на Debian Wheezy (но на Джесси). – baldurmen

6

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

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

4

Почему страница Click:

http://click.pocoo.org/5/why/

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

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

Смежные вопросы