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 clickdef handle_pre_command(ctx, args):"""回调函数,在命令执行前执行一些操作"""print("在命令执行前执行操作")return args@click.command()
@click.pass_context
def my_command(ctx):"""我的命令"""args = ctx.argshandle_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()