我需要编写一个命令行界面,我知道可以使用 docopt
和 argparse
,但是我想知道它们之间的主要区别,以便做出明智的选择。
请保持客观。不需要出现类似于哇,docopt太漂亮了,非常有用这样的评价性言论。
我需要编写一个命令行界面,我知道可以使用 docopt
和 argparse
,但是我想知道它们之间的主要区别,以便做出明智的选择。
请保持客观。不需要出现类似于哇,docopt太漂亮了,非常有用这样的评价性言论。
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:
仅为最终用户方便提供。
Click的Why页面:
https://click.palletsprojects.com/en/7.x/why/
提供了argparse、docopt和click本身之间的很好的比较。
Click
是另一个用于Python的命令行解析工具。
argparse
是 Python 默认库中的一个模块,因此不会给你的程序添加任何额外的依赖项。主要区别在于编写代码的方式。使用 argparse
可以为插件添加钩子,以便它们可以向您的程序添加自己的参数。例如flake8 就是这样使用的。
docopt
是第三方模块,提供了一种简单的解析参数的方法。我个人喜欢 docopt
,因为它很简单,但并不是说在所有情况下都最好使用它。在他们的文档中,他们提到使用 docopt
可以使用更多的参数传递组合,而使用 argparse
时则不能。
argparse
是 Python 默认安装的包,而docopt
则是一个独立的模块。 - user2629998