Python超好用的命令行界面实现工具,我保证你肯定不知道... ...

打印 上一主题 下一主题

主题 889|帖子 889|积分 2671

前言

Click 是一个简洁好用的Python模块,它能用尽量少的代码实现漂亮的命令行界面。它不仅开箱即用、还能支持高度自定义的配
置。
  1. 官方文档:https://click.palletsprojects.com/en/8.0.x/
复制代码
 
一个简单的示例如下:
  1. import click
  2. PYTHON插件/素材/源码加Q群:903971231####
  3. @click.command()
  4. @click.option('--count', default=1, help='Number of greetings.')
  5. @click.option('--name', prompt='Your name',
  6.               help='The person to greet.')
  7. def hello(count, name):
  8.     """Simple program that greets NAME for a total of COUNT times."""
  9.     for x in range(count):
  10.         click.echo(f"Hello {name}!")
  11. if __name__ == '__main__':
  12.     hello()
复制代码
 

效果如下:

可见这个模块的强大之处,你只需要在对应的函数上加几个装饰器,就能实现带提示符的命令行界面的创建,相当方便。
1.准备

首先需要你的电脑安装好了Python环境,并且安装好了Python开发工具。
请选择以下任一种方式输入命令安装依赖:
  1. 1. Windows 环境 打开 Cmd (开始-运行-CMD)。
  2. 2. MacOS 环境 打开 Terminal (command+空格输入Terminal)。
  3. 3. 如果你用的是 VSCode编辑器 或 Pycharm,可以直接使用界面下方的Terminal.
  4. pip install click
复制代码
 
2.基本使用

如文首所示的例子一样,@click.option 是最基本的选项,它既可以设定参数默认值,也可以设定必须传入参数:
  1. @click.command()
  2. @click.option('--n', default=1) # 设定了默认值
  3. def dots(n):
  4.     click.echo('.' * n)
  5.    
  6. @click.command()
  7. @click.option('--n', required=True, type=int) # 设定必须传入参数值
  8. def dots(n):
  9.     click.echo('.' * n)
复制代码
 
如果你设置了必须传入相关参数,那么在没传入参数的情况下,效果是这样的:

当然,它还支持设定多种参数别名,比如下面的 --from 和 -f 是等效的:
  1. @click.command()
  2. @click.option('--from', '-f', 'from_')
  3. @click.option('--to', '-t')
  4. def reserved_param_name(from_, to):
  5.     click.echo(f"from {from_} to {to}")
复制代码
 


3.多值参数

如果你的选项需要多个参数,Click也能帮你实现这个需求。
  1. @click.command()
  2. @click.option('--pos', nargs=2, type=float)
  3. def findme(pos):
  4.     a, b = pos
  5.     click.echo(f"{a} / {b}")
复制代码
 
可见,通过配置nargs参数,你可以将用户传递的值存入元组,并在代码中解包这个元组拿到所有的值。
效果如下:

你还可以配置一个参数叫 multiple,这个参数可以让你接受N个值:
  1. @click.command()
  2. @click.option('--message', '-m', multiple=True)
  3. def commit(message):
  4.     click.echo(' '.join(message))
复制代码
 

4.其他功能

你还可以使用Click来计数,这个使用非常罕见:
  1. @click.command()
  2. @click.option('-v', '--verbose', count=True)
  3. def log(verbose):
  4.     click.echo(f"Verbosity: {verbose}")
复制代码
 
效果如下:

布尔标志
此外,Click还带有布尔标志功能,你可以直接使用 “/” 来标志参数为二选一参数,函数中直接就会拿到布尔型的变量:
  1. import sys
  2. python插件/源码/素材加Q群:903971231###
  3. @click.command()
  4. @click.option('--shout/--no-shout', default=False)
  5. def info(shout):
  6.     rv = sys.platform
  7.     if shout:
  8.         rv = rv.upper() + '!!!!111'
  9.     click.echo(rv)
复制代码
 


选择选项

你可以直接限定用户的输入范围:
  1. @click.command()
  2. @click.option('--hash-type',
  3.               type=click.Choice(['MD5', 'SHA1'], case_sensitive=False))
  4. def digest(hash_type):
  5.     click.echo(hash_type)
复制代码
 

提示文本

在文首提到的例子中,输出了个 “You name:” 的提示,其实是 option 中的prompt参数控制的:
  1. @click.command()
  2. @click.option('--name', prompt='Your name please')
  3. def hello(name):
  4.     click.echo(f"Hello {name}!")
复制代码
 

最后

好了,Click的功能就介绍到这里,他还有许多高级的用法,比如动态默认值、回调函数等等,大家可以通过官方文档了解这些高
级功能的使用方法:
  1. https://click.palletsprojects.com/en/8.0.x/options/#name-your-options
复制代码
 


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

刘俊凯

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表