click的简单使用

click的简单使用

先通过一个简单的例子来认知一下click把

import click


@click.command()
@click.option('-p', '--port', default=('Cat', 5000), type=(str, int), help="localhost:port")
def run(port, password):
    """This is to simulate the local running port"""
    click.echo("%s Run on http://127.0.0.1:%d" % port)


if __name__ == '__main__':
    run()

我们来分析一下这个代码,从而入门click把

  • 首先,通过装饰器click.command()让这个函数成为一个命令行工具
  • 然后通过装饰器click.option()为这个函数的调用添加命令行选项
    • -p --port呢就是短选项和完整选项了,我们使用命令的时候,可以用-p+待传入的参数,也可以是--port+待传入的参数
    • default则是设置默认参数
    • type用于指定传入参数的类型,在4.0版本以后,这个代替了nargs参数,可以用来设置传入多个值,并且规定了类型。
    • help则是提示语,当使用--help的时候可以查看开发者的帮助文档
  • 设置了选项之后,我们需要在函数的形参列表中写上相应的参数名,方便之后的使用
  • 这里用click.echo()代替了print(),因为前者可以无需考虑python的版本。

按照上面这个示例,平常很多需求已可以满足,接下来再介绍一些option的一些参数,以及一些别的装饰器。

  • prompt 这个是用来提示输入参数的

    @click.command()
    @click.option('-p', '--port', type=int, prompt=True, help="localhost:port")
    def run(port):
        """This is to simulate the local running port"""
        click.echo("Run on http://127.0.0.1:%d" % port)
    
    if __name__ == '__main__':
        run()
    
    结果如下:
    (flaskLearn) D:\>python try.py
    Port: 8080
    Run on http://127.0.0.1:8080
    

    这个你也可以自己定义提示语,将prompt后的True改成自己的提示语即可

  • required=True ,这个参数默认是False,即非必须调用,而若是要必须选择,则将其设为True。option中的参数若是没有设置default,在没有使用该选项的时候其值为None。

  • 多选项multiple=True 默认False。看如下例子:

    @click.command()
    @click.option('-p', '--port', multiple=True)
    def run(port):
        print("Run on", port)
    
    (flaskLearn) D:\>python try.py -p 8080 -p 8000 -p 8081
    Run on ('8080', '8000', '8081')
    

    这个与之前的type指定多选项有些类似,但是这个并不指定传入参数值的数量,并且使用的也是同一个参数,二者结合使用需要选择使用。

  • @click.password_option() 这个装饰器用来输入密码,以及确认密码的,示例如下:

    @click.command()
    @click.password_option()
    def encrypt(password):
        click.echo('Encrypting password to %s' % password.encode('rot13'))
    

    它的效果与如下的一样:

    @click.command()
    @click.option('--password', prompt=True, hide_input=True,
                  confirmation_prompt=True)
    def encrypt(password):
        click.echo('Encrypting password to %s' % password.encode('rot13'))
    

    结果如下:

    $ encrypt
    Password: 
    Repeat for confirmation: 
    Encrypting password to frperg
    

    然后第二段代码可以自行选择是否确认和是否隐藏。

  • 还有一个就是@click.confirmation_option(),这个等于也是封装了Yes参数,示例如下:

    @click.command()
    @click.confirmation_option(prompt='Are you sure you want to drop the db?')
    def dropdb():
        click.echo('Dropped all tables!')
    

    与一下代码效果相同:

    def abort_if_false(ctx, param, value):
        if not value:
            ctx.abort()
    
    @click.command()
    @click.option('--yes', is_flag=True, callback=abort_if_false,
                  expose_value=False,
                  prompt='Are you sure you want to drop the db?')
    def dropdb():
        click.echo('Dropped all tables!')
    

    结果如下:

    $ dropdb
    Are you sure you want to drop the db? [y/N]: n
    Aborted!
    $ dropdb --yes
    Dropped all tables!
    

That's All

想看更多用法和更详细的讲解可以参考一下链接:https://click-docs-zh-cn.readthedocs.io/zh/latest/

posted @ 2020-08-26 17:46  凡璞  阅读(579)  评论(0编辑  收藏  举报
1 2
3 4
5 6