这个是flask作者开发的一个第三方模块,用于创建命令行,作用类似于argparse,但是使用起来更方便。
import click
‘‘‘
步骤:
1.使用@click.command()装饰一个函数,使其成为命令行接口
2.再使用@click.option()装饰,为其添加一些命令行选项
注意是
@click.command()
@click.option("--name")
def foo()
不是
@click.option("--name")
@click.command()
def foo()
@click.command()要写在上面
‘‘‘
@click.command()
@click.option("--name", default="satori", help="我是来自东方地灵殿的古明地觉")
def hello(name):
print(name)
‘‘‘
在终端中,执行python 1.py --name=koishi
输出结果:koishi
可是我们并没有再hello函数中传参啊,其实当我们执行hello()执行的不是hello,而是将hello装饰之后的函数
显然,我们在option中指定的--name,会自动传给hello里的参数name。
注意这里一定要匹配,指定了几个option,就要写几个参数
@click.command()
@click.option("--name")
@click.option("--age")
def hello(name):
pass
如果这样的话,会报错TypeError: hello() missing 1 required positional argument: ‘age‘。
因为我们hello明明接收的是两个,却只有一个option,所以会缺少参数
@click.command()
@click.option("--name")
@click.option("--age")
def hello(name):
pass
如果这样的话,会报错TypeError: hello() got an unexpected keyword argument ‘age‘
因为我们hello明明只需要接收一个name参数,但是却指定了两个option
我们直接执行,python 1.py
输出结果:satori,也就是说如果我们不指定,那么会指定为default的值。如果也没写default,那么为None
‘‘‘
if __name__ == ‘__main__‘:
hello()
关于option里的help参数,click也做了许多人性化的设计
import click
@click.command()
@click.option("--age", type=int, required=True)
def hello(age):
print(age)
‘‘‘
这里的type表示类型,如果输入的内容不合法,那么会报错
python 1.py --age=xx
Error: Invalid value for "--age": xx is not a valid integer
python 1.py --age=12
12
这里的required,表示参数是否必填,如果为True,不填报错。而False,不填为None
python 1.py
Error: Missing option "--age".
‘‘‘
if __name__ == ‘__main__‘:
hello()
import click
@click.command()
@click.option("--name", prompt="name不可以为空哦")
def hello(name):
print(name)
‘‘‘
如果没有指定prompt,那么输入python 1.py
会直接返回None
但是一旦我们指定了prompt,就不能为空了,但也不报错,而是一直提示你。
当我输入python 1.py,回车
name不可以为空哦:
name不可以为空哦:
name不可以为空哦:
name不可以为空哦:
name不可以为空哦: 古明地觉
古明地觉
‘‘‘
if __name__ == ‘__main__‘:
hello()
import click
@click.command()
@click.option("--name", nargs=2)
def hello(name):
print(name)
‘‘‘
nargs:表示命令行要接收几个参数
输入python 1.py --name=a b
得到(‘a‘, ‘b‘)
输入python 1.py --name=a b c
得到Error: Got unexpected extra argument (c)
输入python 1.py --name=a
得到Error: --name option requires 2 arguments
‘‘‘
if __name__ == ‘__main__‘:
hello()
import click
@click.command()
@click.option("--name", type=click.Choice(["mashiro", "satori", "koishi"]))
def hello(name):
print(name)
‘‘‘
这样输入的内容,只能是"mashiro", "satori", "koishi"三者之一
python 1.py mmmmm
得到Error: Invalid value for "--name": invalid choice: mmmmm. (choose from mashiro, satori, koishi)
‘‘‘
if __name__ == ‘__main__‘:
hello()