Python - docopt和argparse的区别

23

我需要编写一个命令行界面,我知道可以使用 docoptargparse,但是我想知道它们之间的主要区别,以便做出明智的选择。

请保持客观。不需要出现类似于哇,docopt太漂亮了,非常有用这样的评价性言论。


3
argparse 是 Python 默认安装的包,而 docopt 则是一个独立的模块。 - user2629998
3个回答

20

Docopt解析文档字符串,而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
使用了大约一年后,我认为值得一提的是,由于docopt相对较新且不是Python核心的一部分,它可能无法在旧系统上使用。例如,在Debian Wheezy上没有它(但在Jessie上有)。 - baldurmen

10

1
还有一个原因,你不应该使用它... http://xion.io/post/programming/python-dont-use-click.html - Asara

7
argparse 是 Python 默认库中的一个模块,因此不会给你的程序添加任何额外的依赖项。主要区别在于编写代码的方式。使用 argparse 可以为插件添加钩子,以便它们可以向您的程序添加自己的参数。例如flake8 就是这样使用的。 docopt 是第三方模块,提供了一种简单的解析参数的方法。我个人喜欢 docopt,因为它很简单,但并不是说在所有情况下都最好使用它。在他们的文档中,他们提到使用 docopt 可以使用更多的参数传递组合,而使用 argparse 时则不能。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接