Click 是一个简洁好用的Python模块,它能用尽量少的代码实现漂亮的命令行界面。它不仅开箱即用、还能支持高度自定义的配置。 示例: import click @click.command() @click.option('--coun
Click 是一个简洁好用的Python模块,它能用尽量少的代码实现漂亮的命令行界面。它不仅开箱即用、还能支持高度自定义的配置。
示例:
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(f"Hello {name}!")
if __name__ == '__main__':
hello()
[安装]
pip install click
2.基本使用
如文首所示的例子一样,@click.option 是最基本的选项,它既可以设定参数默认值,也可以设定必须传入参数:
@click.command()@click.option('--n', default=1) # 设定了默认值
def dots(n):
click.echo('.' * n)
@click.command()
@click.option('--n', required=True, type=int) # 设定必须传入参数值
def dots(n):
click.echo('.' * n)
当然,它还支持设定多种参数别名,比如下面的 --from 和 -f 是等效的:
@click.command()@click.option('--from', '-f', 'from_')
@click.option('--to', '-t')
def reserved_param_name(from_, to):
click.echo(f"from {from_} to {to}")
3.多值参数
如果你的选项需要多个参数,Click也能帮你实现这个需求。
@click.command()@click.option('--pos', nargs=2, type=float)
def findme(pos):
a, b = pos
click.echo(f"{a} / {b}")
可见,通过配置nargs参数,你可以将用户传递的值存入元组,并在代码中解包这个元组拿到所有的值。
你还可以配置一个参数叫 multiple,这个参数可以让你接受N个值:
@click.command()@click.option('--message', '-m', multiple=True)
def commit(message):
click.echo(' '.join(message))
4.其他功能
你还可以使用Click来计数,这个使用非常罕见:
@click.command()@click.option('-v', '--verbose', count=True)
def log(verbose):
click.echo(f"Verbosity: {verbose}")
布尔标志
此外,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)
选择选项
你可以直接限定用户的输入范围:
@click.command()@click.option('--hash-type',
type=click.Choice(['MD5', 'SHA1'], case_sensitive=False))
def digest(hash_type):
click.echo(hash_type)
提示文本
在文首提到的例子中,输出了个 "You name:" 的提示,其实是 option 中的prompt参数控制的:
@click.command()@click.option('--name', prompt='Your name please')
def hello(name):
click.echo(f"Hello {name}!")
好了,Click的功能就介绍到这里,他还有许多高级的用法,比如动态默认值、回调函数等等,大家可以通过官方文档了解这些高级功能的使用方法:
https://click.palletsprojects.com/en/8.0.x/options/#name-your-options
可以执行int范围:
@click.option('--times', type=click.IntRange(10, 600), default=30)