美文网首页Python
python_argparse&&click库(从命令行接收用户

python_argparse&&click库(从命令行接收用户

作者: 星辰照耀你我 | 来源:发表于2020-02-23 11:15 被阅读0次

    argparse库

    01.库安装

    argparse库是python自带的命令行参数解析包,不仅可以从用户命令行中获取参数,还可以自动化的输出帮助内容,使用import argparse来判断是否已经安装了这个库,如果没有,其安装的方式也非常的简单,使用pip install argparse就可以直接安装。

    02.创建参数解析对象

    在使用前,首先需要创建一个参数的解析器,在显示help时就会显示出他的描述,当然,括号中的参数可有可无。

    parse = argparse.ArgumentParser(description='description')
    

    这样就生成了一个名为parse的解析对象。

    03.添加参数列表

    为这个对象添加一些参数,使用add_argument方法,其原型为:

    parse.add_argument(name or flags…[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
    
    04.选项name\flag\action\default\type\help

    第一个参数为接收用户数输入的标志,例如--path-y等,其后紧跟的选项为可选项,具体为:

    parse.add_argument('-y',action = 'store_false/store_ture',default = False,help = 'this is help')
    

    这句话中的参数-y存在时,表示了action中的false或true,当不存在时,则为默认值False,这类参数类似于一个判断,yes or no,还有一类参数可以设置获取到参数的类型,int、str等,这类型的参数会将用户输入保存下来,用于最后的操作,例如;

    parse.add_argument('-path',type=str,default ='c:',help = 'cd to this path')
    

    上面设置的两个参数都需要使用parse.parse_args()解析,解析后将其赋值给一个变量,这个变量将会保存用户输入的所有参数内容,具体用法为:

    args = parse.parse_args()
    print args
    

    执行时可以看到我们的输入都被储存了下来。


    运行结果

    使用-h获取帮助列表。


    帮助列表
    通过args.path、args.y可以分别对这两个值操作,完成我们需要的目标。
    05.选项nargs\const\choices\required\metavar\dest

    平常我们需要用到的就是上面那几个参数,以下内容只做了解。

    • nargs表示这个参数接收几个对象,例如一个参数需要多个输入,则要指定nargs,其中通配符?表示1个或0个参数,*表示0个或多个,+表示一个或多个。
    nargs = '+'
    nargs = '?'
    nargs = '*'
    
    • choices表示这个参数的选项,只能从其中挑选,例如参数为性别,则只能从man、woman中选择。
    add_argument('-sex',type=str,default = 'man',choices = ['man','woman'],help = 'choice your sex')
    
    • const与nargs为?必须同时出现,且当选择了选项没有参数时会默认选择const中的内容,而没有选项时才会取default中的内容。当没有nargs时会出现ValueError: nargs must be '?' to supply const的错误。
    • required表示这个参数必须存在,如果设置为required但没有包含这个参数的内容时会提示:error: argument -sex is required
    • metavar将写入的内容扩充到参数的帮助信息中,在显示help时也会显示。
    • dest表示将获取到的参数存放进哪个变量中,例如dest='Ysex',表示可以使用args.Ysex访问这个参数,如果不指定,则会默认使用名字来代替。
    add_argument('-sex',type=str,default = 'man',choices = ['man','woman'],help = 'choice your sex',dest='Ysex')
    #如不指定dest将使用-sex中的sex默认存放,args.sex访问。
    

    click库

    01.click库安装

    click是第三方开发的参数获取库,可以快捷的把一个函数修饰为命令行,相较于python自带的argparse来说,功能更加强大,也更随心所欲点,可以使用pip install click安装。

    02.click基本使用

    click的命令行分为选项和参数两个部分,选项为option,参数为argument,其中option功能较多,封装了许多特殊的功能,其表示可选项,这个参数可有可无;而argument表示了必须存在的参数,按照顺序依次存入相应的变量中,直接使用xxx访问。

    03.修饰一个函数为命令行

    在代码中使用@click.command()将下方的函数改变为命令行,这样的方式显然更加简单。

    import click
    @click.command()
    @click.option('-name',type = str , default = 'wwwaxlz' , help = 'input your name' , prompt  = 'your name:')
    def myfunc(name):
          click.echo(name)
    myfunc()
    

    上面的代码中是option的简单用法,包括了type、default、help和prompt,其中default和help与argparse相同。不再介绍,而type方面扩展了许多的新类型,丰富了第三方库,prompt则是当这个选项没有输入时做出的提示,下面先看type的内容:
    除了int / string / float 等共同的类型外,click含有许多新的类型,例如:

    • click.Choice(['yes','no'])表示只可以在俩个内容中选择,注意'C'大写,否则会出现has no attribute 'choice'的错误
    • click.option('-password',hide_input=True, confirmation_prompt=True,prompt = 'input your pwd' , help = 'password')hide_input表示输入时将会隐藏输入的内容,而confirmation表示输入之后是否需要确认,类似于其他场景中的密码输入。对于密码click有专门的选项,@click.password_option()可以直接完成上面的内容。
    • 作为第三方的库,当然在某些方面是很方便的,例如:
    import click
    @click.command()
    @click.option('-filen',type = click.File('rb'),prompt = 'input your filename',help = 'open file')
    def myfunc(filen):
          print filen.read()
    myfunc()
    
    • 这时将使用rb方法打开一个文件,如果一开始用户没有指定这个参数,将会提醒用户输入。

      运行结果
    • 如果只需要这个文件名称或路径名称时,可以使用:

    import click
    @click.command()
    @click.option('-filen',type = click.Path(exists=True),prompt = 'input your filename',help = 'open file')
    def myfunc(filen):
          clcik.echo(filen)
    myfunc()
    
    • 添加exists=True可以直接判断路径是否存在。
      运行结果

    04.click.argument添加固定参数

    使用argument添加参数时,参数必须存在,且没有prompt、help等选项,当没有选中这个参数时,会直接爆出错误:Error: Missing argument "_FILEN".
    既然不是选项类的参数,那么他的取值完全依靠申明的顺序,第一个申明谁,第一个参数就是谁。
    例如:

    @click.command()
    @click.argument('filen',type = click.Path(exists=True))
    @click.argument('myn',type = str , default = 'sks')
    def myfunc(filen,myn):
          print filen,myn
    

    而提供的参数名称必须与函数形参取名相同,这样才能正确的获取用户的命令行输入。


    执行结果

    显然这种方式没有选项类可完成的动作多,但是简单的脚本中完全可以使用,极简式。

    总结

    argparse与click完成相同的功能,但一个是python自带的库,一个是大神编写的第三方库,argparse可以为整个脚本编写参数,不需要多次申明,而click为某个函数提供参数,用户的输入都被函数获取,每个函数都需要首先注册command,在特殊的方面封装的也比较完整,值得学习!

    相关文章

      网友评论

        本文标题:python_argparse&&click库(从命令行接收用户

        本文链接:https://www.haomeiwen.com/subject/qrxrqhtx.html