命令行神器 Click教程A篇

    xiaoxiao2022-07-15  194

    摘要

    这里介绍一个快速创建命令行的神器click,是一个用Python开发的第三方模块。 相比较Argparse来创建命令行或者参数解析。click确实方便了很多。


    官网 的介绍如下:

    Click is a Python package for creating beautiful command line interfaces in a composable way with as little code as necessary. It’s the “Command Line Interface Creation Kit”. It’s highly configurable but comes with sensible defaults out of the box.

    安装

    官网建议通过virtualevn来安装,关于virtualenv安装Python第三方包的详细教程和注意问题请参考 Centos 下 python 纯净虚拟环境

    安装命令

    pip install click

    安装完成验证

    root@pts/3 $ python Python 2.7.5 (default, Nov 20 2015, 02:00:19) [GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import click >>> click.__version__ '6.6' >>>

    使用

    command

    这里先参考官网给出来的一个例子:

    ## python case script root@pts/3 $ cat case-1.py #!/usr/bin/env python #encoding: utf-8 #author: Colin #date: 2016-12-29 #desc: # import click @click.command() def hello(): click.echo('Hello World!') if __name__ == '__main__': hello() ## execute root@pts/3 $ python case-1.py Hello World! root@pts/3 $ python case-1.py --help Usage: case-1.py [OPTIONS] Options: --help Show this message and exit.

    这里发现 click 自动添加了一个 --help 的参数


    option

    这里介绍用 option 构造命令行参数, 再上面的例子基础上继续修改

    ## scripts import click @click.command() @click.option('--name', prompt='enter your name here: ', help='greet to given name') def hello(name): click.echo('Hello World! hello %s' % name) if __name__ == '__main__': hello() ## execute script root@pts/3 $ python case-2.py enter your name here: : Colin Hello World! hello Colin root@pts/3 $ python case-2.py --name Colin Hello World! hello Colin root@pts/3 $ python case-2.py --name=James Hello World! hello James root@pts/3 $ python case-2.py --help Usage: case-2.py [OPTIONS] Options: --name TEXT greet to given name --help Show this message and exit.

    脚本结果如下:

    关于option使用过程中遇到的几个问题:

    参数名称只能是--xxxx,比如要以`–“开头,不然报错如下:

    group

    使用 group 可以把多个函数组合成子命令;

    有两种方式:

    A:

    通过 `@click.group()` 装饰器定义一个函数 A,最后通过 `A.add_command(hello)` 把别的函数加入到 `group` 函数中去。 注意 `hello` 是脚本中定义的一个命令行函数

    B:

    通过 `@click.group()` 装饰器定义一个函数 B,在定义一般命令行函数的时候,用 `@B.command()` 来替代 `@click.command()` 装饰命令行函数`hello`

    这里给出第一个方式的结果。第二个可以自己尝试看看结果是否一致。具体例子详见:

    ## python script import click @click.group() def gpfun(): pass @click.command() @click.option('--name', prompt='enter your name here: ', help='greet to given name') def hello(name): click.echo('Hello World! hello %s' % name) gpfun.add_command(hello) if __name__ == '__main__': gpfun() ## execute root@pts/3 $ python case-3.py --help Usage: case-3.py [OPTIONS] COMMAND [ARGS]... Options: --help Show this message and exit. Commands: hello root@pts/3 $ python case-3.py hello --help Usage: case-3.py hello [OPTIONS] Options: --name TEXT greet to given name --help Show this message and exit. root@pts/3 $ python case-3.py hello --name='Colin' Hello World! hello Colin

    这里注意多了个gpfun函数,其上的装饰器是@click.group()

    另外注意最下面的 if 判断里面的函数调用变成了 gpfun()

    脚本结果如下:

    其他详细的用法待续…


    简书地址:命令行神器 Click教程A篇


        公众号: DailyJobOps    

    最新回复(0)