python_click.option()使用

目录

        • click官方文档
          • 1、参数前缀@click.option('--n', '-n', default=1)
          • 2、参数个数限制@click.option('--pos', nargs=2, type=float)
          • 3、参数类型及个数限制@click.option('--item', type=(str, int))
          • 4、参数多次使用@click.option('--message', '-m', multiple=True)
          • 5、参数限制@click.option('--choice_type', type=click.Choice(['md512', 'int67']))
          • 6、参数未输入提示@click.option('--name', prompt='please input your name')
          • 7、密码提示@click.option('--password', prompt=True, hide_input=True, confirmation_prompt=True)
          • 8、布尔标记@click.option('--shout/--no-shout', default=False)
          • 9、参数大小写输出@click.option('--lower', 'transformation', flag_value='lower')

click官方文档

  • click官方文档
  • click的option详细使用
  • 推荐文章1
  • 推荐文章2
  • click.command():将该方法变成一个命令行工具
  • click.option():通过指定命令行选项的名称,从命令行读取参数值,再将其传递给函数。
  • click.option(’–count’, default=1,prompt=‘Your name’,type=int,nargs=1,help=‘Number of greetings’)
    • –或-:参数前缀
    • default: 设置命令行参数的默认值
    • help: 参数说明
    • type: 参数类型,可以是 str, int, float ,也可以是选择参数
    • prompt: 当在命令行中没有输入相应的参数时,会根据 prompt 提示用户输入
    • hide_input: 隐藏输入的参数
    • confirmation_prompt:对输入的命令参数检查两次是否一致
    • nargs: 指定命令行参数接收的值的个数, -1 表示可以接收多个参数
# entrance.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):
    for x in range(count):
        click.echo(f'hello {name}')
if __name__ == '__main__':
    hello()
E:\proj\crawl_spider>python entrance.py --count 3 --name Shirmay1
hello Shirmay1
hello Shirmay1
hello Shirmay1
1、参数前缀@click.option(’–n’, ‘-n’, default=1)
  • 默认的参数前缀 – 和 -;参数未指定类型,使用默认值的类型,如果没有默认值,则为string类型。以下例子参数类型与默认值一致为int类型
import click
@click.command()
@click.option('--n', '-n', default=1)
def dots(n):
    click.echo('.' * n)
if __name__ == '__main__':
    dots()
--------------------分割线cmd输入--------------------------
E:\proj\crawl_spider>python entrance.py --n 3
...
E:\proj\crawl_spider>python entrance.py -n 4
....
2、参数个数限制@click.option(’–pos’, nargs=2, type=float)
  • nargs指定可传入的参数个数,并将值存储为元组
import click
@click.command()
@click.option('--pos', nargs=2, type=float)
def findme(pos):
    click.echo(pos)
if __name__ == '__main__':
    findme()
--------------------分割线cmd输入--------------------------
E:\proj\crawl_spider>python entrance.py --pos 3.0
Error: --pos option requires 2 arguments
E:\proj\crawl_spider>python entrance.py --pos 3.0 8.0
(3.0, 8.0)
3、参数类型及个数限制@click.option(’–item’, type=(str, int))
  • 通过使用元组作为type类型,nargs会自动设置为元组的长度。如下没有设置 nargs,但 nargs 会自动取 tuple 的长度值
import click
@click.command()
# @click.option('--item', nargs=2, type=click.Tuple([str, int]))
@click.option('--item', type=(str, int))
def putitem(item):
    click.echo(item)
if __name__ == '__main__':
    putitem()
--------------------分割线cmd输入--------------------------
E:\proj\crawl_spider>python entrance.py --item peter
Error: --item option requires 2 arguments
E:\proj\crawl_spider>python entrance.py --item peter 123
('peter', 123)
4、参数多次使用@click.option(’–message’, ‘-m’, multiple=True)
  • multiple支持同一个参数多次使用,多次提供的参数并记录所有值
import click
@click.command()
@click.option('--message', '-m', multiple=True)
def commit(message):
    click.echo('\n'.join(message))
if __name__ == '__main__':
    commit()
--------------------分割线cmd输入--------------------------
E:\proj\crawl_spider>python entrance.py -m foo
foo
E:\proj\crawl_spider>python entrance.py -m foo -m woo
foo
woo
5、参数限制@click.option(’–choice_type’, type=click.Choice([‘md512’, ‘int67’]))
  • 使 Click.choice 类型来限定传参为哪几个值;当上面的命令行程序参数 --choice_type不是 ‘md512’, ‘int67’,就会输出错误提示
import click
@click.command()
@click.option('--choice_type', type=click.Choice(['md512', 'int67']))
def digest(choice_type):
    click.echo(f'choice_type:{choice_type}')
if __name__ == '__main__':
    digest()
--------------------分割线cmd输入--------------------------
E:\proj\crawl_spider>python entrance.py --choice_type md512
choice_type:md512
6、参数未输入提示@click.option(’–name’, prompt=‘please input your name’)
  • 如果在执行 hello 时没有提供 –name 参数,控制台会提示用户输入该参数。也可以自定义控制台的提示输出,把 prompt 改为自定义内容即可。
import click
@click.command()
# @click.option('--name', prompt='please input your name')
@click.option('--name', prompt=True)
def hello(name):
    click.echo(f'Hello {name}')
if __name__ == '__main__':
    hello()
--------------------分割线cmd输入--------------------------
E:\proj\crawl_spider>python entrance.py
Name: Shirmay1
Hello Shirmay1
E:\proj\crawl_spider>python entrance.py
please input your name: Shirmay1
Hello Shirmay1
7、密码提示@click.option(’–password’, prompt=True, hide_input=True, confirmation_prompt=True)
  • hide_input隐藏输入的数字,confirmation_prompt确认两次输入是否一样。option 的 hide_input 和 confirmation_promt 标识就是用来控制密码参数的输入。
import click
@click.command()
@click.option('--password', prompt=True, hide_input=True, confirmation_prompt=True)
def input_password(password):
    click.echo(f'password:{password}')
if __name__ == '__main__':
    input_password()

---------------------分割线,与上面的是一样的功能--------------------
import click
@click.command()
@click.password_option()
def input_password(password):
    click.echo(f'password:{password}')
if __name__ == '__main__':
    input_password()
--------------------分割线cmd输入--------------------------
E:\proj\crawl_spider>python entrance.py
Password:
Repeat for confirmation:
password:1234
------------------hide_input=False--------------------------------------
E:\proj\crawl_spider>python entrance.py
Password: 1234
Repeat for confirmation: 12
Error: the two entered values do not match
Password: 1234
Repeat for confirmation: 1234
password:1234
8、布尔标记@click.option(’–shout/–no-shout’, default=False)
  • 布尔标记是用来启用或禁用的选项,你可以用/分隔符来实现启用或禁用选项。如果只想为第二个选项定义别名,则需要使用前导空格来消除格式字符串的歧义。
import sys
import click
@click.command()
@click.option('--shout/--no-shout', default=False)
def info(shout):
    rv = sys.platform
    if shout:
        rv = rv.upper() + '!!!!111'
    click.echo(rv)
if __name__ == '__main__':
    info()
---------------------分割线,不想要关闭开关,用is_flag参数告知click这是一个boolean标记--------------------
import sys
import click
@click.command()
@click.option('--shout', is_flag=True)
def info(shout):
    rv = sys.platform
    if shout:
        rv = rv.upper() + '!!!!111'
    click.echo(rv)
if __name__ == '__main__':
    info()
---------------------分割线为--no-shout起别名-S--------------------
import sys
import click
@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)
if __name__ == '__main__':
    info()
--------------------分割线cmd输入--------------------------
E:\project\practice>python entrance.py --shout
WIN32!!!!111
E:\project\practice>python entrance.py --no-shout
win32
E:\project\practice>python entrance.py -S
win32
9、参数大小写输出@click.option(’–lower’, ‘transformation’, flag_value=‘lower’)
  • 功能开关。这些是通过将多个选项设置为相同的参数名称并定义标志值来实现的。请注意,通过提供flag_value参数,Click将隐式设置is_flag=True。
import sys
import click
@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)())
if __name__ == '__main__':
    info()
--------------------分割线cmd输入--------------------------
E:\project\practice>python entrance.py --upper
WIN32
E:\project\practice>python entrance.py --lower
win32

你可能感兴趣的:(PythonKnowledge)