click option/argument参数详解(click.option()和click.argument())

click通过click.command()装饰函数,使之成为命令行接口;通过click.option()装饰函数,为其约束并添加命令行选项和参数。简化了传统加参的方式,减少了开发者编写的代码量,使命令行工具编写起来快速而有趣。

新建一个名为adduser.py的Python文件,寥寥几行代码已经实现了一个完整命令行工具。

import click

@click.command()
@click.option("--name",required=True)
def add(name):
    click.echo(f"add user {name}")

if __name__ == "__main__":
    add()

首先定义了一个add()函数,通过click.command()将add()函数装饰成一个命令接口,这样可以直接在命令行上通过“python 文件名.py ”的形式直接调用add()函数,再通过click.option()为add()函数添加选项“--name”,此选项即可通过命令行输入的形式传给add()函数。

一、click.option中参数的修饰字段汇总

1.required

click.option()函数中有个required字段,当required=True时表示这个选项在命令行输入参数时必须带上,否则会报错。当required=False时,表示此参数可带可不带。

如果将required=False,则命令是可以执行成功的。

import click

@click.command()
@click.option('-n',"--name",required=False)
def add(name):
    click.echo(f"add user {name}")

if __name__ == "__main__":
    add()

click.option()还有许多其他参数字段,用来限制或者扩展选项,以满足开发者的需要。

2.default

为当前的选项添加default值。即使此时required=True,命令行也可以不输入参数值,如果命令行不输入参数值表示此时输入的是默认值。

import click

@click.command()
@click.option("--name",required=True,default="golden")
def add(name):
    click.echo(f"add user {name}")

if __name__ == "__main__":
    add()

3.nargs

指定命令行参数接收的值的个数,等于-1表示接受参数不限

import click

@click.command()
@click.option("--name",required=True,nargs=2)
def add(name):
    print(name)
    click.echo(f"add user {name}")

if __name__ == "__main__":
    add()

4.type

指定输入选项对应的参数的数据类型,未指定时默认是str字符串类型。

import click

@click.command()
@click.option("--name",required=True)
#@click.option("--name",required=True,type=str)  #等同于上一句
def add(name):
    print(type(name))  #打印输入参数name的数据类型
    click.echo(f"add user {name}")

if __name__ == "__main__":
    add()

4.1 type字段对应的数据类型

type字段对应的数据类型
str / click.STRING表示字符串类型,这也是默认类型
int / click.INT表示整型
float / click.FLOAT表示浮点型
bool / click.BOOL表示布尔型。对于 1、yes、y 和 true 会转化为 True;0、no、n 和 false 会转化为 False
click.UUID表示 UUID,会自动将参数转换为 uuid.UUID 对象
click.FILE表示文件,会自动将参数转换为文件对象,并在命令行结束时自动关闭文件
click.PATH表示路径
click.IntRange表示范围选项
click.Choice

限定参数值

@click.option('-c',required=True,type=click.Choice(['start','stop']))

 

 

 

 

5.multiple

multiple=True,使用多个相同地位选项分别指定值

import click

@click.command()
@click.option("-N","-n","--name",required=True,type=str,multiple=True)
def add(name):
    print(name)
    click.echo(f"add user {name}")

if __name__ == "__main__":
    add()

三个选项地位相同,使用的时候可以三选一,可以解决某些要求选项不区分大小写的情况。输入的参数值是以元组的形式传入函数中。

6.prompt

当在命令行中没有输入相应的参数时,会根据 prompt 提示用户输入。一般用于密码验证。prompt=True表示接受用户输入,hide_input=True表示隐藏输入的内容,confirmation_prompt=True表示再次确认输入的内容。当然也可以直接在命令行中输入。

import click

@click.command()
@click.option("--name",required=True,type=str)
@click.option("--password", prompt=True, hide_input=True, confirmation_prompt=True)
#@click.password_option()  #作用同上句一样,是click对上句的封装
def add(name,password):
    print(name,password)
    click.echo(f"add user {name}")

if __name__ == "__main__":
    add()

 

7.is_eager、is_eager、callback,is_flag

Click 提供 eager 标识对参数名进行标识,如果输入该参数,则会拦截既定的命令行执行流程,跳转去执行一个回调函数。
is_eager=True             表明该命令行选项优先级高于其他选项;
expose_value=False   表示如果没有输入该命令行选项时,会执行既定的命令行流程;
callback=函数名          指定了输入该命令行选项时,要跳转执行的函数;
is_flag=True                表明参数值可以省略。

这四个修饰字段一般会同时使用。

import click

def print_version(ctx, param, value):
    print("this program version : 0.1")
    exit()

@click.command()
@click.option("--name",required=True,type=str)
@click.option("--version",is_eager=True,expose_value=False,callback=print_version,is_flag=True)
def add(name):
    print(name)
    click.echo(f"add user {name}")

if __name__ == "__main__":
    add()

is_eager=True表示--version的优先级高于其他选项比如--name,当命令行同时出现这两个参数时,会优先执行--version。

is_flag=True表示该选项的参数值可以省略,就算加上也没有意义

expose_value=False表示命令行中没有出现--version选项时,会执行click既定的命令流程

callback=print_version,表示当命令行中出现--version时,不在执行click既定的命令流程,转而执行print_version()函数。

二、click.argument()

click.argument()比click.option()用法简单很多,也是用来修饰函数为其添加参数的。不同的是argument()只是添加参数,不添加选项。上面option()中用到的修饰字段也可以用于argument()。

import click

@click.command()
#@click.option("--name",required=True,type=str)
@click.argument("name")
def add(name):
    click.echo(f"add user {name}")

if __name__ == "__main__":
    add()

 

 

 

 

 

 

 

  • 10
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值