Python命令行click参数用法解析
这篇文章主要介绍了Python命令行click参数用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
一、前言
在概念上,click把命令行分为3个组成:参数、选项和命令。
参数就是跟在命令后的除选项外的内容,比如gitadda.txt中的a.txt就是表示文件路径的参数
选项就是以-或--开头的参数,比如-f、--file
命令就是命令行的初衷了,比如git就是命令,而gitadd中的add则是git的子命令
二、参数
2.1基本参数
基本参数就是通过位置里指定参数值。
比如,我们可以指定两个位置参数x和y,先添加的x位于第一个位置,后加入的y位于第二个位置。那么在命令行中输入12的时候,分别对应到的就是x和y:
@click.command() @click.argument('x') @click.argument('y') defhello(x,y): print(x,y)
2.2参数类型
参数类型就是将参数值作为什么类型去解析,默认情况下是字符串类型。我们可以通过type入参来指定参数类型。
click支持的参数类型多种多样:
- 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.Choice表示选择选项
- click.IntRange表示范围选项
同argparse一样,click也支持自定义类型,需要编写click.ParamType的子类,并重载convert方法。
2.3文件参数
在基本参数的基础上,通过指定参数类型,我们就能构建出各类参数。
文件参数是非常常用的一类参数,通过type=click.File指定,它能正确处理所有Python版本的unicode和字节,使得处理文件十分方便。
@click.command() @click.argument('input',type=click.File('rb'))#指定文件为二进制读 @click.argument('output',type=click.File('wb'))#指定文件为二进制写 definout(input,output): whileTrue: chunk=input.read(1024)#此时input为文件对象,每次读入1024字节 ifnotchunk: break output.write(chunk)#此时output为文件对象,写入上步读入的内容
2.4文件路径参数
文件路径参数用来处理文件路径,可以对路径做是否存在等检查,通过type=click.Path指定。不论文件名是unicode还是字节类型,获取到的参数类型都是unicode类型。
@click.command() @click.argument('filename',type=click.Path(exists=True))#要求给定路径存在,否则报错 defhello(filename): click.echo(click.format_filename(filename))
如果文件名是以-开头,会被误认为是命令行选项,这个时候需要在参数前加上--和空格,比如
$pythonhello.py---foo.txt -foo.txt
2.5选择项参数
选择项参数用来限定参数内容,通过type=click.Choice指定。
比如,指定文件读取方式限制为read-only和read-write:
@click.command() @click.argument('mode',type=click.Choice(['read-only','read-write'])) defhello(mode): click.echo(mode)
2.6可变参数
可变参数用来定义一个参数可以有多个值,且能通过nargs来定义值的个数,取得的参数的变量类型为元组。
若nargs=N,N为一个数字,则要求该参数提供N个值。若N为-1则接受提供无数量限制的参数,如:
@click.command() @click.argument('foo',nargs=-1) @click.argument('bar',nargs=1) defhello(foo,bar): pass
如果要实现argparse中要求参数数量为1个或多个的功能,则指定nargs=-1且required=True即可:
@click.command() @click.argument('foo',nargs=-1,required=True) defhello(foo,bar): pass
2.7从环境变量读取参数
通过在click.argument中指定envvar,则可读取指定名称的环境变量作为参数值,比如:
@click.command() @click.argument('filename',envvar='FILENAME') defhello(filename): print(filename)
执行如下命令查看效果:
$FILENAME=hello.txtpython3hello.py hello.txt
而在argparse中,则需要自己从环境变量中读取。
三、小节
本文讲解了click中基本参数的用法,在此基础上介绍了各种类型的参数,最后说明了从环境变量中获取参数值的写法。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。