Python_7:命令行库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('\n'.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