Python - docopt 和 argparse 之间的区别

Posted

技术标签:

【中文标题】Python - docopt 和 argparse 之间的区别【英文标题】:Python - Difference between docopt and argparse 【发布时间】:2014-01-03 04:05:24 【问题描述】:

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

我想知道两者之间的主要区别是什么,以便我做出明智的选择。

请坚持事实。我不想要哇。博士。如此美丽。非常有用。

【问题讨论】:

argparse 在默认的 Python 包中,而 docopt 是一个单独的模块。 【参考方案1】:

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: 只是为了方便最终用户。

【讨论】:

在使用了一年之后,我认为值得一提的是,由于 docopt 是相当新的并且不是 python 核心的一部分,它可能无法在旧系统上使用。即,它不在 Debian Wheezy 上(但在 Jessie 上)。【参考方案2】:

点击的为什么页面:

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

在 argparse、docopt 和 click 之间进行了很好的比较。

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

【讨论】:

还有为什么你不应该使用它...xion.io/post/programming/python-dont-use-click.html【参考方案3】:

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

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

【讨论】:

以上是关于Python - docopt 和 argparse 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

python argpare 模块的简单用法

Python - docopt 和 argparse 之间的区别

Python 中命令行参数解析工具 docopt 安装和应用

使用docopt生成Python脚本参数项

python docopt模块详解

Python 命令行之旅:使用 docopt 实现 git 命令