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

前言

Click 是一个简洁好用的Python模块,它能用尽量少的代码实现漂亮的命令行界面。它不仅开箱即用、还能支持高度自定义的配

置。

官方文档:https://click.palletsprojects.com/en/8.0.x/

一个简单的示例如下:

import click
PYTHON插件/素材/源码加Q群:903971231####
@click.command()
@click.option('--count', default=1, help='Number of greetings.')
@click.option('--name', prompt='Your name',
              help='The person to greet.')
def hello(count, name):
    """Simple program that greets NAME for a total of COUNT times."""
    for x in range(count):
        click.echo(f"Hello {name}!")

if __name__ == '__main__':
    hello()

效果如下:

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

1.准备

首先需要你的电脑安装好了Python环境,并且安装好了Python开发工具。

请选择以下任一种方式输入命令安装依赖:

1. Windows 环境 打开 Cmd (开始-运行-CMD)。
2. MacOS 环境 打开 Terminal (command+空格输入Terminal)。
3. 如果你用的是 VSCode编辑器 或 Pycharm,可以直接使用界面下方的Terminal.

pip install click

2.基本使用

如文首所示的例子一样,@click.option 是最基本的选项,它既可以设定参数默认值,也可以设定必须传入参数:

@click.command()
@click.option('--n', default=1) # 设定了默认值
def dots(n):
    click.echo('.' * n)

@click.command()
@click.option('--n', required=True, type=int) # 设定必须传入参数值
def dots(n):
    click.echo('.' * n)

如果你设置了必须传入相关参数,那么在没传入参数的情况下,效果是这样的:

当然,它还支持设定多种参数别名,比如下面的 –from 和 -f 是等效的:

@click.command()
@click.option('--from', '-f', 'from_')
@click.option('--to', '-t')
def reserved_param_name(from_, to):
    click.echo(f"from {from_} to {to}")

3.多值参数

如果你的选项需要多个参数,Click也能帮你实现这个需求。

@click.command()
@click.option('--pos', nargs=2, type=float)
def findme(pos):
    a, b = pos
    click.echo(f"{a} / {b}")

可见,通过配置nargs参数,你可以将用户传递的值存入元组,并在代码中解包这个元组拿到所有的值。

效果如下:

你还可以配置一个参数叫 multiple,这个参数可以让你接受N个值:

@click.command()
@click.option('--message', '-m', multiple=True)
def commit(message):
    click.echo(' '.join(message))

4.其他功能

你还可以使用Click来计数,这个使用非常罕见:

@click.command()
@click.option('-v', '--verbose', count=True)
def log(verbose):
    click.echo(f"Verbosity: {verbose}")

效果如下:

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

布尔标志

此外,Click还带有布尔标志功能,你可以直接使用 “/” 来标志参数为二选一参数,函数中直接就会拿到布尔型的变量:

import sys
python插件/源码/素材加Q群:903971231###
@click.command()
@click.option('--shout/--no-shout', default=False)
def info(shout):
    rv = sys.platform
    if shout:
        rv = rv.upper() + '!!!!111'
    click.echo(rv)

选择选项

你可以直接限定用户的输入范围:

@click.command()
@click.option('--hash-type',
              type=click.Choice(['MD5', 'SHA1'], case_sensitive=False))
def digest(hash_type):
    click.echo(hash_type)

提示文本

在文首提到的例子中,输出了个 “You name:” 的提示,其实是 option 中的prompt参数控制的:

@click.command()
@click.option('--name', prompt='Your name please')
def hello(name):
    click.echo(f"Hello {name}!")

最后

好了,Click的功能就介绍到这里,他还有许多高级的用法,比如动态默认值、回调函数等等,大家可以通过官方文档了解这些高

级功能的使用方法:

https://click.palletsprojects.com/en/8.0.x/options/#name-your-options

Original: https://www.cnblogs.com/1234567FENG/p/16400944.html
Author: 蚂蚁爱Python
Title: Python超好用的命令行界面实现工具,我保证你肯定不知道…

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/643584/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 英国延长 UKCA 标记截止日期

    政府于 2022 年 11 月 14 日宣布,企业将有 2 年的时间来应用新的 UKCA 产品标记。在 2024 年 12 月 31 日之前,企业可以选择使用 UKCA 或 CE …

    技术杂谈 2023年6月21日
    087
  • FPGA学习-1,ModelSim 仿真

    参考https://blog.csdn.net/xy_z_H/article/details/124825179补充1、用到的两个文件(手敲一遍)BCD.v module BCD(…

    技术杂谈 2023年6月1日
    0108
  • IC 后端仿真: process corner 和 PVT (转)

    与双极晶体管不同,在不同的晶片之间以及在不同的批次之间,MOSFETs参数变化很大。为了在一定程度上减轻电路设计任务的困难,工艺工程师们要保证器件的性能在某个范围内,大体上,他们以…

    技术杂谈 2023年6月1日
    098
  • 012 Linux 搞懂用户权限升级(sudo 和 su),包学会😁

    Linux 系统中 root 账号通常用于系统的管理和维护,对操作系统的所有资源具有访问控制权限,当一个普通用户希望执行一些系统维护相关的操作的时候,就需要使用 sudo 命令,临…

    技术杂谈 2023年7月10日
    069
  • 浅说正则——会了就不会忘

    闲来无事,看了看新浪最近的面试题,其中关于正则的题目,让自己意识到了这一块的薄弱。 闲来无事,搜集了很多资料(ps:三中全会这几天,用google特慢,不得以用bd,不说了,你懂得…

    技术杂谈 2023年5月31日
    086
  • 批量修改SVN的用户名和密码的尝试

    起源 公司规定每6个月需要修改一次密码,否则每天都有邮件和内网提醒。因为邮箱密码和svn等一系列应用绑定,避免每次修改密码后需要手工输入修改多个svn仓库的帐号和密码。 PS.同一…

    技术杂谈 2023年6月1日
    0117
  • golang interface用法

    接口是一个或多个方法签名的集合,任何类型的方法集中只要拥有与之对应的全部方法,就表示它”实现”了该接口无须在该类型上显式添加接口声明。 所谓对应方法,是指有…

    技术杂谈 2023年5月31日
    0109
  • NTP时钟服务器(时钟系统)在智慧教室里的应用

    NTP时钟服务器(时钟系统)在智慧教室里的应用 NTP时钟服务器(时钟系统)在智慧教室里的应用 NTP时钟服务器(时钟系统)在智慧教室里的应用 京准电子科技官微——ahjzsz 近…

    技术杂谈 2023年6月21日
    0103
  • WTL中最简单的实现窗口拖动的方法(转)

    目前,很多基于对话框的应用程序中对话框都是不带框架的,也就是说对话框没有标题栏。众所周知,窗口的移动都是通过鼠标拖动窗口的标题栏来实现的,那么现在应用程序中的对话框没有了标题栏,用…

    技术杂谈 2023年5月31日
    088
  • SpringBoot学习笔记

    前置要求:spring、springMVC、maven spring5升级:响应式编程,基于Java8新特性,如接口默认实现,重新设计内部源码架构 SpringBoot的优点: 创…

    技术杂谈 2023年7月11日
    091
  • GUI 快捷键的实现思路

    代码改变世界 Cnblogs Dashboard Login 2013-11-29 13:50 Clingingboy 阅读(736 ) 评论() 编辑 思路: 前提快捷键操作不可…

    技术杂谈 2023年5月31日
    096
  • OS第三章错题补充

    OS第三章错题补充 ​ 批处理作业调度原则:公平性、极大的流量、平衡资源使用 ​ ​ 每个进程申请该类资源最多为4,6*3=18,再加上一个额外的资源,所以20个资源完全够6个程序…

    技术杂谈 2023年7月11日
    081
  • 高频算法题之数组详细分析

    大家好,我是程序员学长~ 今天给大家带来一篇面试高频算法题之数组的详细解析,全文包含19道大厂笔试面试算法真题,一举拿下数组这个知识点,让算法不在成为进入大厂的绊脚石。 如果喜欢,…

    技术杂谈 2023年7月25日
    094
  • java 异常类与自定义异常

    目录 异常类 Exception 类的层次 throws/throw 关键字: throws: throw: try catch finally语句 声明自定义异常 异常类 在 J…

    技术杂谈 2023年6月21日
    0132
  • 亿赛通文件外发

    http://www.esafenet.com/product/278192282 Original: https://www.cnblogs.com/hshy/p/1653901…

    技术杂谈 2023年5月31日
    088
  • PHP获取毫秒时间戳

    //获取毫秒时间 function microsecond() { $t = explode(" ", microtime()); $microsecond =…

    技术杂谈 2023年5月31日
    0107
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球