Python中的Click模块

Python中的Click模块

1. 安装和简单使用

1.1 安装

pip install click

1.2 简单使用

1.2.1 @click.command()

用于将一个函数转换为命令行接口。当使用这个装饰器修饰一个函数时,该函数将被注册为一个可执行的命令,可以通过命令行调用。

import click
'''在运行起来的时候没有任何区别'''
@click.command()
def main():
   print("执行main方法")
if __name__ == "__main__":
   main()

1.2.2 @click.group()

@click.group()是Python中click包的一个装饰器,用于创建一个命令行组。当使用这个装饰器修饰一个函数时,该函数将作为命令行组的入口点,可以包含其他子命令。通过在命令行中使用组名和子命令名来调用这些子命令。

import click
@click.command()
def fun1():
   print("执行fun1方法")

@click.command()
def fun2():
   print("执行fun2方法")

@click.group()
def main():
   pass
main.add_command(fun1)
main.add_command(fun2)
if __name__ == "__main__":
   main()

1.2.3 @click.option()

@click.option()是Python中click包的一个装饰器,用于为命令行接口添加选项参数。

import click
@click.command()
@click.option('--input','-i',help="请输入:input内容",type=str,required=True,default='默认值')
def fun2(input):
	print(f"执行fun2方法{input}")

@click.group()
def main():
	pass
main.add_command(fun2)
if __name__ == "__main__":
	main()


import click
@click.command()
@click.option('--username','-u',help="请输入:用户名",type=str,required=True)
@click.option('--e_mail','-e',help="请输入:邮箱",type=str,required=True)
def getUserInfo(username,e_mail):
	print(f"用户名:{username}")
	print(f"邮箱:{e_mail}")

@click.group()
def main():
	pass
main.add_command(getUserInfo)
if __name__ == "__main__":
	main()

1.2.4 click.echo()

click.echo()是Python中click包的一个函数,用于在命令行界面输出文本。

import click
@click.command()
def fun1():
	click.echo(click.style('这是红色文本', fg='red'))
	click.echo(click.style('这是绿色文本', fg='green'))
	click.echo(click.style('这是蓝色文本', fg='blue'))
@click.group()
def main():
	pass
main.add_command(fun1)
if __name__ == "__main__":
	main()

1.2.5 click.argument()

import click

@click.command()
@click.argument('name')  # 必须提供的参数
@click.argument('age', default=30)  # 可选的参数,默认值为 30
@click.argument('files', nargs=-1, metavar='<file1> <file2> ...')  # 接受任意数量的文件名
def greet(name, age, files):
    # 输出用户的名字和年龄
    print(f'Hello, {name}! You are {age} years old.')

    # 如果有文件输入,列出每个文件的处理情况
    if files:
        print("Processing the following files:")
        for file in files:
            print(f'  - {file}')
    else:
        print("No files to process.")

if __name__ == '__main__':
    greet()

2. 参数解析

2.1 @click.option()

配置名称 是否必须配置 默认值 说明
name 选项的名称,通常以短横线开头,如 -f 或 --file。
flag False 布尔标志,如果指定,则该选项不需要值。
required False 布尔值,表示该选项是否必须提供。
help 选项的帮助信息,将在命令行中使用 --help 时显示。
type 选项的数据类型,例如 int、float 等。
default 选项的默认值。
show_default True 布尔值,表示是否在帮助信息中显示默认值。默认为 True。
callback 一个回调函数,当选项被设置时调用。
multiple False 布尔值,表示该选项是否可以多次使用。默认为 False。
expose_value True 布尔值,表示是否将选项的值传递给回调函数。默认为 True。
hide_input False 布尔值,用于隐藏输入。默认为 False。
confirmation_promt False 布尔值,用于重复输入。默认为 False。
is_eager False 布尔值,表示该命令行选项优先级高于其他选项。默认为 False。
prompt None 如果设置为 True 或指定提示字符串,当命令行没有输入该选项时,程序将提示用户输入该选项的值。这在交互式命令行工具中特别有用。
nargs 1 指定该选项接收的值的个数。默认值为 1,但可以设置为 -1 来接收多个值。数字也可以设置为固定数量。
metavar None 自定义该选项在帮助页面中的显示名称。默认情况下,click 会根据类型自动生成参数的显示名称。使用此选项可以使帮助文档更具可读性和自定义性。

option 提供了两个参数来设置密码的输入:hide_input 和 confirmation_promt,其中,hide_input 用于隐藏输入,confirmation_promt 用于重复输入。click 也提供了一种快捷的方式,通过使用 @click.password_option()。

2.2 @click.echo()

配置名称 是否必须配置 默认值 说明
values 可变参数,可以传入任意数量的参数,这些参数将被拼接成一个字符串并输出。
err False 布尔值,默认为 False。如果为 True,则将输出重定向到 stderr。
nl True 布尔值,默认为 True。如果为 False,则不会在输出末尾添加换行符。
color None 字符串或 None,默认为 None。如果为字符串,则使用该颜色进行输出。如果为 None,则不使用颜色。
file sys.stdout 文件对象,默认为 sys.stdout。如果指定了文件对象,则将输出写入该文件。

2.3 @click.argument

配置名称 是否必须配置 默认值 说明
param_type 定义参数类型。例如 int, str, float 等。通常是 click 模块提供的类型。
default 指定参数的默认值。如果不指定,则此参数为必需项。
nargs 1 指定参数可以接受的值的数量。例如,nargs=-1 表示接受多个值。
required True 如果设置为 True,则此参数为必需的。通常用于 @click.option,但在 @click.argument 中,参数通常是必需的。
help 为该参数提供帮助信息,用于生成帮助文档。
metavar 设置参数的显示名称,通常用于帮助文档中。
expose_value True 如果为 True,则该参数的值会暴露给命令的内部代码。
is_eager False 如果为 True,此参数将在所有选项之前进行处理。
is_flag False 将参数设置为布尔标志。这个选项通常在 @click.option 中使用,而不是 @click.argument
show_default False 如果为 True,则在帮助文档中显示参数的默认值。

argument 还有另外一种常见的用法,就是接收不定量的参数。

nargs=-1 表明参数 src 接收不定量的参数值,参数值会以 tuple 的形式传入函数。如果 nargs 大于等于 1,表示接收 nargs 个参数值。

posted @   零の守墓人  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示