Python Click库的来源:
Click是一个Python的命令行接口库,它由Alexandru Dutra和Ignacio Vergara于2010年创建。Click的目标是提供一种简单而灵活的方式来创建命令行应用程序。
常用参数说明:
@click.command():这个装饰器用于定义一个新的命令。每个命令都需要一个函数作为其主体。
.@click.option():这个装饰器用于定义命令行选项。
1.name:选项的名称,必须以双短划线开头。
2.default:选项的默认值。
3.type:选项的类型。例如,int,float,path等。
4.required:是否必须提供该选项。
5.help:选项的帮助文本。
6.callback:当选项被提供时调用的回调函数。
@click.argument():这个装饰器用于定义命令行参数。
1.name:参数的名称。
2.type:参数的类型。
3.required:是否必须提供该参数。
4.help:参数的帮助文本。
click.echo():用于在命令行中输出文本。
click.get_current_context():返回当前上下文对象,可以用于访问当前命令的参数和选项
click.Abort():引发一个中止异常,这将导致程序退出并显示错误消息。
click.File():用于处理文件输入/输出。
click.Path():用于处理路径选项或参数,它确保路径是有效的,并且可以自动创建目录
click.Choice(choices):允许用户从一组预定义的值中选择一个选项
click.Confirm(prompt=None, default=True, abort=False):用于确认操作是否应该继续进行。
click.Password(prompt=‘Password:’, default=‘’, hide_input=True):用于接收密码输入,不会在命令行中显示输入的内容。
代码示例:
以下是一个简单的Click命令行应用的示例,它用于计算两个数字的和:
python
import click
@click.command()
@click.option('--num1', type=int, default=0, help='First number')
@click.option('--num2', type=int, default=0, help='Second number')
@click.option('--sum', type=int, default=0, help='Sum of the two numbers')
def calculate(num1, num2, sum):
if num1 + num2 == sum:
click.echo('Numbers match!')
else:
click.echo(f'Numbers do not match! The sum is {num1 + num2}')
if __name__ == '__main__':
calculate()
stdout:
tiger@Super-Server:~/C++_Study$ python3 calculate.py --help
Usage: 1.py [OPTIONS]
Options:
--num1 INTEGER First number
--num2 INTEGER Second number
--sum INTEGER Sum of the two numbers
--help Show this message and exit.
在这个示例中,我们定义了一个名为calculate的函数,它有三个选项:num1, num2, 和 sum。用户可以通过命令行提供这些选项的值,然后程序会检查两个数字的和是否与提供的值匹配,并输出相应的消息。
以下是一些更高级的Click应用示例,用于帮助你深入学习:
使用组(Groups):
import click
from click import Command, Group, echo
@click.group()
@click.pass_context
def my_app(ctx):
"""My Application"""
ctx.obj = []
@my_app.command()
@click.pass_context
def add(ctx):
"""Add an item to the list"""
item = click.prompt('Enter an item')
ctx.obj.append(item)
@my_app.command()
@click.pass_context
def display(ctx):
"""Display the current list"""
echo('Current list:')
for item in ctx.obj:
echo(item)
if __name__ == '__main__':
my_app()
使用回调函数(Callback Functions):
import click
def handle_pre_command(ctx, args):
"""
回调函数,在命令执行前执行一些操作
"""
print("在命令执行前执行操作")
return args
@click.command()
@click.pass_context
def my_command(ctx):
"""
我的命令
"""
args = ctx.args
handle_pre_command(ctx, args)
print("命令执行前")
# 在这里执行一些操作...
print("命令执行后")
if __name__ == '__main__':
wait()
使用上下文参数(Contextual Parameters):
python
import click
@click.command()
@click.option('--file', type=click.File('r'), default='-', help='Input file. Defaults to stdin.')
def cat(file):
click.echo(file.read())
if __name__ == '__main__':
cat()