我必须编写一个命令行界面,并且我已经看到我可以使用docopt
and argparse
.
我想知道两者之间的主要区别是什么,以便我做出明智的选择。
请坚持事实。我不要哇 博士。如此美丽。很有用。
我必须编写一个命令行界面,并且我已经看到我可以使用docopt
and argparse
.
我想知道两者之间的主要区别是什么,以便我做出明智的选择。
请坚持事实。我不要哇 博士。如此美丽。很有用。
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()
文档示例:
"""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:
仅为最终用户的方便而提供。
Click的Why页面:
https://click.palletsprojects.com/en/7.x/why/
在 argparse、docopt 和 click 之间进行了很好的比较。
Click
是 Python 的另一个命令行解析实用程序。
argparse
位于 python 默认库中,因此这不会向您的程序添加任何额外的依赖项。差异主要是编写代码的方式。使用argparse
它可以为插件添加钩子,以便它们可以将自己的 argumnets 添加到您的程序中。例如flake8使用它。
docopt
是一个第三方模块,提供了一种解析参数的简单方法。我个人喜欢docopt
它的简单性,但我并不是说它在所有情况下都是最好的。在他们的文档中,他们提到使用docopt
它可以使用比使用更多的参数传递组合argparse
。