栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python click模块option

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python click模块option

官网地址:Welcome to Click — Click Documentation (8.1.x) 函数说明

@click.command() 装饰器,使函数成为命令行接口。
@click.option() 装饰器,为其添加命令行选项。

click.option()参数说明
  1. default: 设置命令行参数的默认值
  2. help: 参数说明
  3. type: 参数类型,可以是 string, int, float 等
  4. prompt: 当在命令行中没有输入相应的参数时,会根据 prompt 提示用户输入
  5. nargs: 指定命令行参数接收的值的个数
  6. 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

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

命令行输入:log -vvv

输出如下内容

Verbosity: 3

Boolean Flgs: 启用或禁用选项

布尔标志是可以启用或禁用选项。可以通过用斜杠(/)一次定义两个标志来实现,以启用或禁用该选项。(如果斜线在选项字符串中,单击会自动知道它是一个布尔标志,并将隐式地传递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!
密码提示

@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 Parameters

对于危险的操作,要求用户进行确认的,这可以通过添加一个布尔值——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!

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/942953.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号