• Python_7:命令行库Click


    目录:

    一、简介

    二、快速上手

    使用 click 构造漂亮的Python命令行程序

    大家都说好用的python命令行库:click

    三、中文文档

    中文文档-选项

    一、简介:

    Click 是一个利用很少的代码以可组合的方式创造优雅命令行工具接口的 Python 库。

    Click 被设计用来快速构建命令行程序,因此缺乏一些扩展性,比如他不允许高度定制help介绍。Click 是用来支持 Flask 开发框架的。

    二、快速上手:

    1、基本使用

    # hello.py
    import click
    @click.command()
    @click.option('--count', default=1, help='Number of greetings.')
    @click.option('--name', prompt='Your name',
                  help='The person to greet.')
    def hello(count, name):
        """Simple program that greets NAME for a total of COUNT times."""
        for x in range(count):
            click.echo('Hello %s!' % name)
    
    if __name__ == '__main__':
        hello()

    然后可以这样运行该脚本 python hello.py --count=3,并且 Click 还会自动生成 help 信息。

    2、Option 参数

    Click 使用基本可以归纳为

    • 使用 @click.command() 装饰一个函数,使之成为命令行接口;
    • 使用 @click.option() 等装饰函数,为其添加命令行选项等。

    最基础的用法, option 接受一个变量

    @click.command()
    @click.option('--n', default=1)
    def hello(n):
        click.echo('hello' * n)

    使用 --n=2 输出两遍

    接受多个变量,需要使用 nargs 指定数量

    @click.command()
    @click.option('--pos', nargs=2, type=float)
    def cal(pos):
        click.echo('%s / %s' % pos)

    使用 --pos 5.0 4.0

    如果参数是固定的几个值,可以使用可选项

    @click.command()
    @click.option('--hash-type', type=click.Choice(['md5', 'sha1']))
    def digest(hash_type):
        click.echo(hash_type)

    使用 --hash-type=md5 参数只能为 md5 或者 sha1,否则报错。

    option 还有其他一些参数,比如 prompt 当用户忘记该参数时,将错误报出来,hide_input 可以隐藏输入,常用于密码输入,confirmation_prompt 验证输入等等。

    Click 封装了

    @click.password_option()
    @click.confirmation_option(prompt='Are you sure you want to drop the db?')

    3、argument 参数

    和 Option 一样,Argument 最基础的应用就是传递一个简单变量值

    @click.command()
    @click.argument('input', type=click.File('rb'))
    @click.argument('output', type=click.File('wb'))
    def inout(input, output):
        while True:
            chunk = input.read(1024)
            if not chunk:
                break
            output.write(chunk)


    三、Click 中文文档

    通过 option() 装饰器可以给命令增加选项。通过配置参数来控制不同的选项。Click 中的选项不同于 位置参数

    1、基本的值选项

    最基本的选项是值选项。这种类型的选项接受一个是值得参数。如果没有指定值的类型,那么将使用默认类型 STRING。默认情况下,参数的名称为第一个 长选项,如果没有长选项则为第一个短选项。

    @click.command()
    @click.option('--n', default=1)
    def dots(n):
        click.echo('.' * n)
    

    在命令行中运行:

    $ dots --n=2
    ..
    

    这上述例子中选项值的类型是 INT,因为值的默认值为数字。

    2、多个值的选项

    有时候,你需要有多个值得选项。这种选项只支持固定数量的参数。通过 nargs 参数来配置。多个值将被放入一个元组(tuple)中。

    @click.command()
    @click.option('--pos', nargs=2, type=float)
    def findme(pos):
        click.echo('%s / %s' % pos)
    

    在命令行中运行:

    $ findme --pos 2.0 3.0
    2.0 / 3.0
    

    3、使用元组(tuple)代替多个值的选项

    4.0 新版功能.

    正如你所看到的,使用 nargs 来设置一个每个值都是数字的选项,得到的元组(tuple)中都是一样的数字类型。这可能不是你想要的。 通常情况下,你希望元组中包含不同类型的值。你可以直接使用下列的特殊元组达成目的:

    @click.command()
    @click.option('--item', type=(unicode, int))
    def putitem(item):
        click.echo('name=%s id=%d' % item)
    

    在命令行中运行:

    $ putitem --item peter 1338
    name=peter id=1338
    

    使用元组的选项,nargs 会根据元组的长度自动生成,同时自动使用 click.Tuple。以下列子可等价表达上述例子:

    @click.command()
    @click.option('--item', nargs=2, type=click.Tuple([unicode, int]))
    def putitem(item):
        click.echo('name=%s id=%d' % item)
    

    4、多个选项

    和 nargs 类似,有时候可能会需要一个参数传递多次,同时记录每次的值而不是只记录最后一个值。 比如,git commit -m foo -m bar 会记录两行 commit 信息:foo 和 bar。这个功能 可以通过 multiple 参数实现:

    例如:

    @click.command()
    @click.option('--message', '-m', multiple=True)
    def commit(message):
        click.echo('
    '.join(message))
    

    在命令行中运行:

    $ commit -m foo -m bar
    foo
    bar
    

    5、计数

    在一些非常罕见的情况下,使用重复的选项来计数是很有意思的。例如:

    @click.command()
    @click.option('-v', '--verbose', count=True)
    def log(verbose):
        click.echo('Verbosity: %s' % verbose)
    

    在命令行中运行:

    $ log -vvv
    Verbosity: 3
    

    6、布尔值标记

    布尔值标记用于开启或关闭选项。可以通过以 / 分割的两个标记来实现开启或关闭选项。(如果 / 在一个选项名中,Click 会自动识别其为布尔值标记,隐式默认 is_flag=True)。Click 希望你能提供一个开启和关闭标记然后设置默认值。

    例如:

    import sys
    
    @click.command()
    @click.option('--shout/--no-shout', default=False)
    def info(shout):
        rv = sys.platform
        if shout:
            rv = rv.upper() + '!!!!111'
        click.echo(rv)
    

    在命令行中运行:

    $ info --shout
    LINUX2!!!!111
    $ info --no-shout
    linux2
    

    如果你实在不想要一个关闭标记,你只需要定义开启标记,然后手动设置它为标记。

    import sys
    
    @click.command()
    @click.option('--shout', is_flag=True)
    def info(shout):
        rv = sys.platform
        if shout:
            rv = rv.upper() + '!!!!111'
        click.echo(rv)
    

    在命令行中运行:

    $ info --shout
    LINUX2!!!!111
     
  • 相关阅读:
    java第二次作业 数组和String类
    java第一次作业
    选择
    latex math
    sum的写法
    qt 4.8.5 vs 2012编译
    物联网笔记四:物联网网络及协议
    物联网学习笔记三:物联网网关协议比较:MQTT 和 Modbus
    物联网学习笔记二:物联网网关
    物联网学习笔记一:物联网入门的必备 7 大概念和技能
  • 原文地址:https://www.cnblogs.com/hailin2018/p/14632602.html
Copyright © 2020-2023  润新知