click.option()参数说明@click.command() 装饰器,使函数成为命令行接口。
@click.option() 装饰器,为其添加命令行选项。
基础示例
- default: 设置命令行参数的默认值
- help: 参数说明
- type: 参数类型,可以是 string, int, float 等
- prompt: 当在命令行中没有输入相应的参数时,会根据 prompt 提示用户输入
- nargs: 指定命令行参数接收的值的个数
- metavar:如何在帮助页面表示值
说明:如果没有指定type,则使用默认值的类型。如果没有提供默认值,则类型默认为字符串
一个参数接收多个值@click.command() @click.option('--n', default=1) def dots(n): click.echo('#' * n)命令行输入:dots --n=2
输出如下内容
##
接收元组@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
多选项@click.command() @click.option('--item', type=(str, int)) def putitem(item): click.echo('name=%s id=%d' % item)或
@click.command() @click.option('--item', nargs=2, type=click.Tuple([str, int])) def putitem(item): click.echo('name=%s id=%d' % item)命令行输入:putitem --item peter 1338
输出如下内容
name=peter id=1338
计算@click.command() @click.option('--message', '-m', multiple=True) def commit(message): click.echo('n'.join(message))命令行输入:commit -m foo -m bar
输出如下内容
foo bar
Boolean Flgs: 启用或禁用选项@click.command() @click.option('-v', '--verbose', count=True) def log(verbose): click.echo('Verbosity: %s' % verbose)命令行输入:log -vvv
输出如下内容
Verbosity: 3
开关布尔标志是可以启用或禁用选项。可以通过用斜杠(/)一次定义两个标志来实现,以启用或禁用该选项。(如果斜线在选项字符串中,单击会自动知道它是一个布尔标志,并将隐式地传递is_flag=True)。
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
输出如下内容
LINUX!!!!111命令行输入:info --no-shout
输出如下内容
linux第二种写法
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
输出如下内容
LINUX!!!!111如果选项中已经包含斜杠(例如,如果使用windows样式的参数,其中/是前缀字符),也可以将参数分割成;改为:
@click.command() @click.option('/debug;/no-debug') def log(debug): click.echo('debug=%s' % debug) if __name__ == '__main__': log()如果您只想为第二个选项定义一个别名,则您将需要使用前导空格来消除格式字符串的歧义:
import sys @click.command() @click.option('--shout/--no-shout', ' /-S', default=False) def info(shout): rv = sys.platform if shout: rv = rv.upper() + '!!!!111' click.echo(rv)
可选值除了布尔标志之外,还有一些特性开关。这些都是通过将多个选项设置为相同的参数名并定义一个标志值来实现的。注意,通过提供flag_value参数,隐式地设置is_flag=True。
import sys @click.command() @click.option('--upper', 'transformation', flag_value='upper', default=True) @click.option('--lower', 'transformation', flag_value='lower') def info(transformation): click.echo(getattr(sys.platform, transformation)())命令行输入:info --upper
输出如下内容
LINUX命令行输入:info --lower
输出如下内容
linux命令行输入:info
输出如下内容
LINUX
提示@click.command() @click.option('--hash-type', type=click.Choice(['md5', 'sha1'])) def digest(hash_type): click.echo(hash_type)命令行输入:digest --hash-type=md5
输出如下内容
md5命令行输入:digest --hash-type=foo
输出如下内容
Usage: digest [OPTIONS] Error: Invalid value for "--hash-type": invalid choice: foo. (choose from md5, sha1)
@click.command()
@click.option('--name', prompt=True)
def hello(name):
click.echo('Hello %s!' % name)
命令行:
$ hello --name=John
Hello John!
命令行:
$ hello
Name:
输入:John
Hello John!
# 填入具体的提示信息:
@click.command()@click.option('--name', prompt='Your name please')
def hello(name):
click.echo('Hello %s!' % name)
命令行:
$ hello
Your name please: John
Hello John!
密码提示
Yes Parameters@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')) # 另一种更简洁写法 @click.command() @click.password_option() def encrypt(password): click.echo('Encrypting password to %s' % password.encode('rot13')) 命令行: $ encrypt Password: Repeat for confirmation:
对于危险的操作,要求用户进行确认的,这可以通过添加一个布尔值——yes标志,并要求确认,如果用户没有提供它,并在回调中失败:
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!') # 另一种简洁的写法 @click.command() @click.confirmation_option(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!



