Python - docopt和argparse之间的区别

bal*_*men 20 python command-line-arguments argparse docopt

我必须编写一个命令行界面,我已经看到我可以使用docoptargparse.

我想知道两者之间的主要区别是什么,这样我才能做出明智的选择.

请坚持事实.我不想哇.docopt.如此美丽.很有用.

rei*_*eer 14

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()
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

请注意,docopt使用Usage:Options:部分进行解析.这里Arguments:仅提供最终用户的便利.

  • 在使用了一年之后,我认为值得一提的是,由于docopt是最新的并且不是python核心的一部分,因此它可能不适用于旧系统.也就是说,它不在Debian Wheezy上(但在Jessie上). (2认同)

Cri*_*oro 8

为什么页面点击:

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

在argparse,docopt和click本身之间有很好的比较。

Click 是另一个用于Python的命令行解析实用程序。


Rem*_*ing 7

argparse是在python默认库中,因此这不会为您的程序添加任何额外的依赖项.差异主要在于编写代码的方式.使用argparse它可以为插件添加钩子,这样他们就可以将自己的argumnets添加到程序中.例如,flake8使用它.

docopt是第三方模块提供了一种解析参数的简单方法.我个人喜欢它docopt因为它的简单,但我并不是说它在所有情况下都是最好的.在他们的文档中,他们提到使用docopt它可以使用更多的参数传递组合而不是使用时argparse.