从argparse到click
介绍
介绍两个命令行传参数模块argparse与Click模块,这两个包的作用都是用来控制向python命令行传参数的
- argparse属于自带的库,基本功能都能实现
- click属于需要再安装的库,但是使用更加方便(通过装饰器实现),其设计目标是可以支持灵活的命令嵌套
除此之外,还有很多方式操作这个,最简单的是sys.argv[]
argparse基本方法介绍
主要流程
- 在入口文件处加入argparse
- 注册parser
argparse.ArgumentParser
- parser中添加参数
parser.add_argment
- 获取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 输入参数数量
评价
- 比较简洁的方式(三步走:注册、加入参数、解析参数)
- 当非入口文件需要外部参数只需要在相应文件加入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 的用法有些差别。
其他方法
- 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的扩充功能
- argparse的choices只能从几个中选择,click的IntRange可以实现多个选择
- 命令的任意嵌套
- 密码输入时命令行加密
@click.option('-p',prompt='Your Password',hide_input=True,confirmation_prompt=True)