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}")

 

效果如下:
在这里插入图片描述

布尔标志

此外,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

 

在这里插入图片描述

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python超好用的命令行界面实现工具,我保证你肯定不知道… - Python技术站

(0)
上一篇 2023年4月2日
下一篇 2023年4月2日

相关文章

  • Python迭代对象、迭代器与生成器

    关系图 1.可迭代对象(iterable) 一个具备__iter__()方法的对象,就是一个可迭代对象,但是要成为一个正常的可迭代对象那么就需要遵循协议。这个方法必须返 回一个迭代器。 可迭代协议: 含__iter__()方法。且可迭代对象中的__iter__()方法返回的是一个对应的迭代器。(如list对应的迭代器就是 list_iterator) 以下代…

    Python开发 2023年4月2日
    00
  • Python 视频制作神器 — Manim入门篇

    今天分享一篇文章,是关于如何使用 Manim 这个工具 Python 工具库来制作视频的。 据我所知,目前应该是没有专门的书籍和教程来介绍这个工具的。至于教程,不同版本的Manim有一部分文档,其中 Manim社区 版的文档相对而言要完善些。 本次仅介绍 Manim 中 文本 的使用,使用的版本为 Manim Community v0.14.0,本文内容主要…

    Python开发 2023年4月2日
    00
  • Python实现秒杀某宝商品抢购(附超详细代码)

    前言 618过去了,前两天我干了一件惊天动地的大事,估计这件大事是很多小伙伴都想干的。我居然用python抢购淘宝商品,没想到 吧,最勇敢的还是我。关于抢购的思路以及代码,我将会在这篇文章中详细的介绍,感兴趣的可以往下看哟!!! 目录 1.项目环境 2.某宝抢购流程分析 3.程序实现思路 4.代码实践与梳理   标题项目环境 •操作系统:Windows 10…

    Python开发 2023年4月2日
    00
  • 期末了,用Python写个自动批改作业系统

    一、亮出效果 最近一些软件的搜题、智能批改类的功能要下线。 退1024步讲,要不要自己做一个自动批改的功能啊?万一哪天孩子要用呢! 昨晚我做了一个梦,梦见我实现了这个功能,如下图所示: 功能简介:作对了,能打对号;做错了,能打叉号;没做的,能补上答案。 醒来后,我环顾四周,赶紧再躺下,希望梦还能接上。 二、实现步骤 基本思路 其实,搞定两点就成,第一是能识别…

    Python开发 2023年4月2日
    00
  • Python图片压缩处理

    前言 不知道有没有人跟我有一样的烦恼,有时候图片太大了占内存很烦,本来手机内存也就那么点,放一个图片稍微大一点的,都不 能放一个成百上千张,这不是很烦嘛。于是,这又让我来灵感了,既然图片给了我难题,那么我就来接受这样的挑战。所以,我 决定用python来试试可不可以压缩图片,不是不知道,一试就成功了,那么好的东西怎么能一个人独享呢,当然要分享出来给大 家呀~…

    Python开发 2023年4月2日
    00
  • 【Python】实现自动扫雷,挑战世界纪录

    前言 大家好,欢迎来到 Crossin的编程教室 ! 今天给大家分享的这个案例是用 Python+OpenCV 实现了自动扫雷,并突破了人类的世界记录。(当然 这不算哈) 咱们废话不多说,先看成果~ 中级 – 0.74秒 3BV/S=60.81 相信许多人很早就知道有扫雷这么一款经典的游(显卡测试)戏(软件),更是有不少人曾听说过中国雷圣,也是中国扫雷第 一…

    Python开发 2023年4月2日
    00
  • 【Python手写笔记】 文件与异常,纯肝货

    前言 今天给大家分享一下我自己写的笔记,纯纯的都是干货,关于字好像也能看。这是我学python整理出来的一些资料,希望对大家 有用。想要更多的资料那就的给一个关注了… python学习交流Q群:903971231### #导入Counter from collections import Counter def readfile(): red_lists=[…

    Python开发 2023年4月2日
    00
  • 用Python制作爆款视频,太绝了

    前言 前几天小编在抖音上刷到一个慢慢变老的视频,播放量居然有 30W+,当时就在想这视频 Python 可不可以做?经过一番搜索,小编找到了 腾讯云的人脸年龄变化 API,上面介绍说只要用户上传一张人脸图片,基于人脸编辑与生成算法,就可以输出一张人脸变老或变年轻的图 片,并支持实现人脸不同年龄的变化。 准备工作 获取 API 秘钥 第一步,在注册账号之后,打…

    Python开发 2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部