Python - Difference between docopt and argparse

2019-04-18 07:01发布

问题:

I have to write a command-line interface and I've seen I can use docopt and argparse.

I would like to know what are the main differences between the two so that I can make an enlightened choice.

Please stick to the facts. I don't want Wow. docopt. So beautiful. Very useful.

回答1:

Docopt parses a doc string, whereas argparse constructs its parsing by creating an object instance and adding behaviour to it by function calls.

Example for 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()

Example for 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)

Note, that docopt uses Usage: and Options: sections for parsing. Here Arguments: is provided only for end-user convenience.



回答2:

argparse is in the python default library, so this doesn't add any extra dependencies to your program. The differences are mainly the way of writing your code. Using argparse it is possible to add hooks for plugins so they can add their own argumnets to your program. For example flake8 uses this.

docopt is a third party module provides a simple way of parsing arguments. I personally like docopt because of its simplicity, but I'm not saying it is the best to use in all cases. In their documentation they mention that using docopt it is possible to use more combinations of argument passing than when using argparse.



回答3:

The Why page for Click:

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

has a nice comparison between argparse, docopt and click itself.

Click is another command-line parsing utility for Python.