从argparse到click

介绍

介绍两个命令行传参数模块argparse与Click模块,这两个包的作用都是用来控制向python命令行传参数的

  • argparse属于自带的库,基本功能都能实现
  • click属于需要再安装的库,但是使用更加方便(通过装饰器实现),其设计目标是可以支持灵活的命令嵌套

除此之外,还有很多方式操作这个,最简单的是sys.argv[]

argparse基本方法介绍

主要流程

  1. 在入口文件处加入argparse
  2. 注册parser argparse.ArgumentParser
  3. parser中添加参数 parser.add_argment
  4. 获取args parser.parse_args() 返回的是一个NameSpace(类似对象)

add_argment详解

基本用法

parser.add_argument('--name', default='Great')
parser.add_argument('-n', '--name', default='None')

参数

  • default 默认参数
  • required 是否必须设置
  • type 参数类型
  • choices 一个list中选择
  • help -h时候会显示
  • nargs 输入参数数量

评价

  1. 比较简洁的方式(三步走:注册、加入参数、解析参数)
  2. 当非入口文件需要外部参数只需要在相应文件加入argparse即可

click介绍

调用方式

python 10-2.click.py --name=tc
python 10-2.click.py --name tc

基本用法

import click
  
@click.command()
@click.option('--count', default=1, help='Number of greetings.')
@click.option('--name', prompt='Your name', help='The person to greet.')
def hello(count, name):
    """Simple program that greets NAME for a total of COUNT times."""
    for x in range(count):
        click.echo('Hello %s!' % name)
  
if __name__ == '__main__':
    hello()

@click.command() 使函数 hello 成为命令行接口;

@click.option 的第一个参数指定了命令行选项的名称,可以看到,count 的默认值是 1;

使用 click.echo 进行输出是为了获得更好的兼容性,因为 print 在 Python2 和 Python3 的用法有些差别。

其他方法

  1. click.group

Click还提供了group方法,该方法可以添加多个子命令

import click


@click.group()
def first():
    print("hello world")

@click.command()
@click.option("--name", help="the name")
def second(name):
    print("this is second: {}".format(name))

@click.command()
def third():
    print("this is third")

first.add_command(second)
first.add_command(third)

first()
$ python test.py second --name hh

# 输出
hello world
this is second: hh

相比argparse的扩充功能

  1. argparse的choices只能从几个中选择,click的IntRange可以实现多个选择
  2. 命令的任意嵌套
  3. 密码输入时命令行加密 @click.option('-p',prompt='Your Password',hide_input=True,confirmation_prompt=True)