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 clickdef 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()

click option/argument参数详解(click.option()和click.argument())相关推荐

  1. Python 命令行参数详解

    Python 命令行参数详解 0. 命令行参数 1. sys.argv 2. getopt 2.1 getopt.getopt 方法 2.2 Exception getopt.GetoptError ...

  2. LNMP nginx1.4.6+php5.5.11+mysql5.6.17+mecache+opcache编译安装+opcache参数详解+opcache可视化php页面代码

    可能要用到的软件: libiconv-1.13.tar.gz  libmcrypt-2.5.8.tar.gz  mcrypt-2.6.8.tar.gz  mhash-0.9.9.9.tar.gz  m ...

  3. Nginx内置变量以及日志格式变量参数详解

    Nginx内置变量以及日志格式变量参数详解 $args #请求中的参数值 $query_string #同 $args $arg_NAME #GET请求中NAME的值 $is_args #如果请求中有 ...

  4. 04_Flink-HA高可用、Standalone集群模式、Flink-Standalone集群重要参数详解、集群节点重启及扩容、启动组件、Flink on Yarn、启动命令等

    1.4.Flink集群安装部署standalone+yarn 1.4.1.Standalone集群模式 1.4.2.Flink-Standalone集群重要参数详解 1.4.3.集群节点重启及扩容 1 ...

  5. Linux平台Makefile文件的编写基础篇和GCC参数详解

    问:gcc中的-I.是什么意思....看到了有的是gcc -I. -I/usr/xxxxx..那个-I.是什么意思呢 最佳答案 答:-Ixxx 的意思是除了默认的头文件搜索路径(比如/usr/incl ...

  6. Linux 之 编译器 gcc/g++参数详解

    2016年12月9日16:48:53 ----------------------------- 内容目录: [介绍]  gcc and g++分别是gnu的c & c++编译器 gcc/g+ ...

  7. rsync的介绍及参数详解,配置步骤,工作模式介绍

    rsync的介绍及参数详解,配置步骤,工作模式介绍 rsync是类unix系统下的数据镜像备份工具.它是快速增量备份.全量备份工具. Sync可以远程同步,支持本地复制,或者与其他SSH.rsync主 ...

  8. [转帖]Ipvsadm参数详解(常用命令)

    Ipvsadm参数详解(常用命令) 2013年11月29日 12:41:40 怀素1980 阅读数:15901 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn ...

  9. PHP curl 参数详解

    PHP curl参数详解,分享一下. curl_setopt (PHP 4 >= 4.0.2) curl_setopt -- 为CURL调用设置一个选项 描述 bool curl_setopt ...

  10. g++编译命令使用以及参数详解

    gcc & g++现在是gnu中最主要和最流行的c & c++编译器 . g++是c++的命令,以.cpp为主,对于c语言后缀名一般为.c.这时候命令换做gcc即可.其实是无关紧要的. ...

最新文章

  1. linux下常用命令之nc
  2. IntelliJ-将Java项目/模块转换为Maven项目/模块
  3. 如何系统的自学python 知乎-如何系统地自学 Python?
  4. 个人永久性免费-Excel催化剂功能第26波-正确的Excel密码管理之道
  5. jquery - 正则表达式
  6. Java多线程基础总结
  7. 联想G480黑苹果试玩纪录
  8. nds android7.0模拟器,NDS用MD模拟器jEnesisDS 0.7
  9. SAA7113视频解码芯片介绍
  10. [Azure] 取消 或 删除Azure云订阅服务
  11. 3❤️Jenkins从零到壹❤️ :常用功能大全(JAVA 小虚竹)
  12. 【爬虫实战】01利用python爬虫并进行数据分析(链家 爬虫)
  13. STM32CubeMX新建工程+基本IO配置过程
  14. 批量压缩图片大小 – Caesium简体中文
  15. 重新连接 到 时出错 Microsoft Windows Network:本地设备名已在使用中
  16. python教育学_我去过书声琅琅教育学Python,没想到却跟想象的不一样!
  17. 正则表达式的介绍及应用
  18. 开发落网电台windows phone 8应用的计划(4)
  19. 跨浏览器书签同步(Floccus + WebDav)
  20. surrogate function

热门文章

  1. (二十三)用几何布朗运动模拟股价走势
  2. 2017-2018 年终总结
  3. stl源码 vector不正规解析2 (自用)VS2019
  4. php path_info orig_path_info
  5. jar包打包成exe安装包
  6. 计算机专业夏令营英语面试范文,夏令营英语面试自我介绍
  7. python operator.add_Python模块:operator简单介绍
  8. 注册表编辑已经被您的系统管理员停用
  9. edm java_EDM推送
  10. Busting Frame Busting: a Study of Clickjacking Vulnerabilities on Popular Sites