python 之 click 包,设置命令行参数

click包一般用于带参数的python脚本运行,是通过装饰器来把一个函数方法装饰成命令行接口的,
常见的装饰器有:
1. @click.command():将其下面的函数方法装饰为命令行接口选项,(我们称为一个command实例或子命令),实现在命令行运行时可选
2. @click.option(’--xxx’, '-x', default=1,prompt=‘Your name’,type=int,nargs=1,help=‘Number of greetings)
    参数释义:--xxx:即下列函数的形参
                      -x:形参在命令行里的缩写
                      default:默认值
                      prompt:若未输入,就提示该内容
                      type:参数类型
                      nargs:指定命令行参数接收的值的个数, -1 表示可以接收多个参数
                      help:编辑该参数的帮助

例:

import click

@click.command() # 将函数装饰为命令
@click.option('--n', '-nn', default=1) # 设置函数执行时的参数
def dots_n(n):
    click.echo('.' * n)
    
if __name__ == '__main__':
    dots_n()

3. @click.group():装饰器把主函数装饰为可以拥有多个子命令的 Group 对象,即脚本文件里有多个函数方法(可装饰为command实例),不同的 command 实例可以关联到group中。group下绑定的命令就成为了它的子命令。

例:

import click
@click.group() # 将主函数封装到一个group对象
def main():
    pass
@main.command() # 将函数装饰为命令,并将该命令自动关联到main这一group对象下,成为子命令
@click.option('--n', '-nn', default=1) # 设置函数执行时的参数
def dots_n(n):
    click.echo('.' * n)
    
@main.command() 
@click.option('--name', '-a', default='ZJW', type=str, prompt='Your Name')
def your_name(name):
    click.echo(name)
if __name__ == '__main__':
    main()

这里,不使用'main.command()'自动关联,可以使用main.add_command()手动关联,例:

import click
@click.group() # 将main函数装饰为一个group对象
def main():
    pass
@click.command() # 将下列函数装饰为命令
@click.option('--n', '-nn', default=1) # 设置函数参数
def dots_n(n):
    click.echo('.' * n)

@click.command()
@click.option('--a', '-aa', default='ZJW', type=str, prompt='Your Name')
def your_name(a):
    click.echo(a)
main.add_command(dots_n) # 将命令关联到main这一group对象下
main.add_command(your_name)
if __name__ == '__main__':
    main()

运行:

python test.py dots-n --n 5 或
python test.py dots-n -n 5
python test.py your-name --name zjw 或
python test.py your-name -a zjw

这里值得注意的时,函数名里的下划线‘_’要在输入时变为‘-’,否则函数会报参数不对的错误。
并且我们如果不输入command的话,会报下列错误:

Usage: test.py [OPTIONS] COMMAND [ARGS]...

Options:
  --help  Show this message and exit.

Commands:
  dots-n
  your-name

参考:https://www.cnblogs.com/alexkn/p/6980400.html 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值