📜  Argparse VS Docopt VS Click – 比较Python命令行解析库

📅  最后修改于: 2022-05-13 01:55:52.111000             🧑  作者: Mango

Argparse VS Docopt VS Click – 比较Python命令行解析库

在了解Python解析库之前,我们必须先了解命令行用户界面。命令行界面(CLI)为命令行程序提供了一个用户友好的界面,这是开发人员或喜欢键盘编程而不是使用鼠标的程序员最喜欢的。通过构建命令行界面,用户可以更有效地通过控制台、shell 或终端进行交互。

有很多Python库可以构建命令行应用程序,例如ArgparseDocoptClickClient等等。现在,让我们更多地了解常用的Python库——Argparse、Docopt 和 Click。

解析

Argparse 是一个用户友好的命令行界面。 argparse模块解析命令行参数和选项/标志。

安装:

安装 argparse 模块的方法有很多,最简单的方法是使用pip

$ pip install argparse

初始化 Argparse

import argparse
parser=argparse.ArgumentParser(description="Program description")

添加位置/可选参数:使用add_argument()我们可以向解析器添加位置/可选参数。

在这里, -parameterName是一个简写符号。
--optionalName是可选参数。
-h –help监控帮助。

命令行用法

$ python [file].py [command] [options] name

例子:

Python3
# argparse_example.py
 
import argparse
 
if __name__=='__main__':
     
    #Initialize
    parser=argparse.ArgumentParser(description="Simple calculator")
     
    #Adding optional parameters
    parser.add_argument('-n1',
                        '--num1',
                        help="Number 1",
                        type=float)
 
    parser.add_argument('-n2',
                        '--num2',
                        help="Number 2",
                        type=float)
 
    parser.add_argument('-op',
                        '--operation',
                        help="operator",
                        default="*")
     
    #Parsing the argument
    args=parser.parse_args()
    print(args)
 
    #Initialize result to None
    result =None
 
    #Simple calculator operations
    if args.operation == '+':
        result=args.num1+args.num2
 
    if args.operation == '-':
        result=args.num1-args.num2
 
    if args.operation == '/':
        result=args.num1/args.num2
 
    if args.operation == '*':
        result=args.num1*args.num2
 
    if args.operation == 'pow':
        result=pow(args.num1,args.num2)
     
    #Print the result  
    print("Result = " ,result)


Python3
#docopt_example.py
 
#usage pattern
usage='''
 
Usage:
  docopt_example.py command --option 
  docopt_example.py  
  docopt_example.py --version
 
Options:
  -h, --help     Display help
  -o, --option   Display options
  -l, --all      List all
  -q, --quit     exit
  --version      Version 3.6.1
       
'''
 
#Initialization  
from docopt import docopt
 
args=docopt(usage)
print(args)


Python3
# click_example.py
 
import click
 
# initialize result to 0
result=0
 
@click.command()
@click.option('--num1',
              default=1,
              help='Enter a float value',
              type=float)
 
@click.option('--num2',
              default=1,
              help='Enter a float value',
              type=float)
 
@click.option('--op',
              default='+',
              help='Enter the operator')
 
# Calculator function
def calculator(num1,num2,op):
    if op=='+':
        result=num1+num2
    if op=='*':
        result=num1*num2
    if op=='-':
        result=num1-num2
    if op=='/':
        result=num1/num2
 
    # print the result   
    click.echo("Result is %f" %result)
 
if __name__ =='__main__':
    calculator()



输出:

多科普

Docopt 为命令行应用程序创建命令行界面,它会自动为它生成一个解析器。 docopt的主要思想是用文本从字面上描述界面,如docstring

安装:

要安装此模块,请在终端中键入以下命令。

$pip install docopt 

它最常用于显示帮助消息,并使用 -h 或 –help 选项调用。 docopt使您可以对帮助页面进行强大的控制,它包含不区分大小写用法关键字,后跟程序名称。一个简单的使用模式如下:

Usage : my_program command --option  

例子:

Python3

#docopt_example.py
 
#usage pattern
usage='''
 
Usage:
  docopt_example.py command --option 
  docopt_example.py  
  docopt_example.py --version
 
Options:
  -h, --help     Display help
  -o, --option   Display options
  -l, --all      List all
  -q, --quit     exit
  --version      Version 3.6.1
       
'''
 
#Initialization  
from docopt import docopt
 
args=docopt(usage)
print(args)

输出:

点击

Click 是一个命令行界面创建工具包,它有助于命令的任意嵌套,自动帮助页面生成,支持在运行时延迟加载子命令。它旨在使编写命令行工具的过程变得快速而有趣,同时还防止因无法实现预期的CLI API而导致的任何挫败感。它带有有用的常用助手(获取终端尺寸、ANSI 颜色、获取直接键盘输入、屏幕清除、查找配置路径、启动应用程序和编辑器等)

安装:

要安装此模块,请在终端中键入以下命令。

$pip install click

例子:

Python3

# click_example.py
 
import click
 
# initialize result to 0
result=0
 
@click.command()
@click.option('--num1',
              default=1,
              help='Enter a float value',
              type=float)
 
@click.option('--num2',
              default=1,
              help='Enter a float value',
              type=float)
 
@click.option('--op',
              default='+',
              help='Enter the operator')
 
# Calculator function
def calculator(num1,num2,op):
    if op=='+':
        result=num1+num2
    if op=='*':
        result=num1*num2
    if op=='-':
        result=num1-num2
    if op=='/':
        result=num1/num2
 
    # print the result   
    click.echo("Result is %f" %result)
 
if __name__ =='__main__':
    calculator()

输出:

结论

在看到上述库的实现后,我们可以得出结论:

  • Argparse:它是一个标准库(包含在Python中)并且由于在幕后发生的工作而非常易于使用。例如,这个库可以区分使用 add_arguments() 方法自动定义的参数和选项。
  • Docopt:这个库用于编写文档。此外,该库以多种语言使用,即您可以学习该库并以多种语言使用它。
  • Click:这个库提供了装饰器风格的实现,非常有用,因为你可以装饰你想要使用的函数。这也使得代码的阅读变得非常容易。