Python超好用的命令行界面实现工具

简说Python

共 3411字,需浏览 7分钟

 · 2022-03-01

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

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

一个简单的示例如下:

import click

@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开发工具。


如果你还没有安装,可以参考以下文章:

如果仅用Python来处理数据、爬虫、数据分析或者自动化脚本、机器学习等,建议使用Python基础环境+jupyter即可,安装使用参考Windows/Mac 安装、使用Python环境+jupyter notebook


如果想利用Python进行web项目开发等,建议使用Python基础环境+Pycharm,安装使用参考 :Windows下安装、使用Pycharm教程,这下全了 和 Mac下玩转Python-安装&使用Python/PyCharm 。(其实我现在更建议大家安装使用vscode)


请选择以下任一种方式输入命令安装依赖
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

@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

老表荐书

图书介绍自然语言处理NLP从入门到项目实战(Python语言实现)

让机器会语言:全球首款AI写作平台创始人、京大学高材生、知NLP大V、知名“大厂”特约作者 通过小白都能懂的语言,解读晦涩难懂的前沿技术,带领机器从牙牙学语到行云流水。

本书从人工智能和自然语言处理技术的基础原理讲起,逐步深入自然语言处理进阶实战,并配有实战代码讲解,重点介绍了使用开源技术、人工智能开放平台,以及使用国内外优秀开发框架进行基于规则、统计、深度学习的自然语言处理程序开发,让读者全面掌握理论基础,并学以致用。


扫码即可加我微信

老表朋友圈经常有赠书/红包福利活动

赠书介绍给本文在看+点赞,扫码加我微信,本文点赞破50后,我将在朋友圈送出3本《自然语言处理NLP从入门到项目实战(Python语言实现)》。


【注意⚠️】近三个月内获得赠书的读者将无法再次获得赠书,想要多次获得赠书,可以查看下面的投稿规则及激励。


那么下期见,我是爱猫爱技术,更爱思思的老表⁽⁽ଘ( ˙꒳˙ )ଓ⁾⁾

近期阅读学习推荐

服务器被黑客攻击,用来挖矿!怎么办?

Python自动化处理Excel表格实战完整代码分享(课表解析)

为了一个HTTPS,浏览器操碎了心···

如何找到我

分享

收藏

点赞

在看

浏览 46
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报