当前位置: 首页 > article >正文

如何实现一个CLI命令行功能 | python 小知识

如何实现一个CLI命令行功能 | python 小知识

在现代软件开发中,命令行界面(CLI)的设计与交互至关重要。Click是一个强大的Python库,专门用于快速创建命令行界面,以其简单易用性和丰富的功能赢得了开发者的青睐。本文将详细介绍Click库的功能、CLI的应用场景,并通过具体代码示例展示如何实现CLI。

1. Click库功能简介

Click是由Armin Ronacher开发的一个Python库,旨在简化命令行应用程序的开发过程。它提供了装饰器(decorators)和命令组(command groups)等高级特性,使得开发者可以轻松地组织和管理命令行应用的各个部分。Click的设计理念是简单、易于理解和使用,同时又能满足复杂的需求。

  • 装饰器:Click提供了@click.command()和@click.option()等装饰器,用于定义命令和选项。
  • 命令组:通过@click.group()装饰器,可以创建一个包含多个子命令的命令组。
  • 自动生成帮助文档:Click能够自动生成命令行应用的帮助文档,提高用户体验。

2. CLI的应用场景

CLI在软件开发中具有广泛的应用场景,包括但不限于:

  • 系统管理工具:通过CLI,开发者可以创建高效的系统管理工具,用于监控、配置和管理系统资源。
  • 自动化脚本:CLI是自动化脚本构建的基础,通过命令行参数和选项,可以灵活地控制脚本的行为。
  • 数据处理和分析工具:CLI工具可用于数据处理和分析,通过命令行接收输入数据并输出结果。
  • 开发工具和框架:许多开发工具和框架都提供CLI接口,用于项目的创建、构建、测试和部署。

3. 简单的使用

以下是一个使用Click库创建CLI的示例代码,包括显示问候信息和计算两个数字之和的功能。

3.1 安装Click库

首先,确保你已经安装了Click库。如果没有安装,可以使用以下命令进行安装:

pip install click

3.2 编写CLI应用

下面是一个简单的CLI应用示例,包括主函数、问候信息命令和计算命令。

import click# 定义命令行接口的主函数
@click.group()
def cli():pass# 定义一个命令来显示问候信息
@cli.command()
@click.argument('name')
def greet(name):"""显示问候信息"""click.echo(f'Hello, {name}!')# 定义一个命令来计算两个数字的和
@cli.command()
@click.argument('x', type=float)
@click.argument('y', type=float)
def add(x, y):"""计算两个数字的和"""click.echo(f'The sum of {x} and {y} is {x + y}')# 运行命令行接口
if __name__ == '__main__':cli()

3.3 代码说明

  • 导入Click库:通过import click导入Click库。
  • 定义主函数:使用@click.group()装饰器创建一个Click组命令cli,它可以包含多个子命令。
  • 定义问候信息命令:使用@cli.command()装饰器将greet函数注册为cli组的一个子命令。@click.argument('name')装饰器表示这个命令需要一个位置参数name
  • 定义计算命令:类似地,add命令也使用@cli.command()装饰器注册,并接受两个位置参数xy,它们被指定为浮点数类型。
  • 运行命令行接口:在脚本的主程序中调用cli()来启动命令行接口。

3.4 运行示例

将上述代码保存为cli_app.py,然后在命令行中运行以下命令:

python cli_app.py greet Alice

输出:

Hello, Alice!

再运行:

python cli_app.py add 3.5 7.2

输出:

The sum of 3.5 and 7.2 is 10.7

通过以上示例,我们创建了一个简单的Click命令行应用。你可以根据需要扩展这个示例,添加更多的命令和选项。

6. 实现一个大语言模型的chat 命令行功能

6.1 假设的LanguageModel

首先,我们定义一个简化的LanguageModel类,用于模拟与大语言模型的交互。这个类将包含一个respond方法,该方法接收用户输入并返回模型的响应。

class LanguageModel:def __init__(self):# 初始化模型(在实际应用中,这里可能是加载预训练模型或建立API连接)passdef respond(self, prompt):"""模拟模型对输入的响应。在实际应用中,这里将调用大语言模型的API或运行本地模型来获取响应。"""# 简单的模拟响应,这里只是将输入反转作为响应(仅用于示例)return prompt[::-1]  # 注意:这只是一个非常简化的模拟!

6.2 更新CLI应用以包含对话功能

接下来,我们将更新之前的CLI应用,添加一个新的命令来启动与大语言模型的对话。

import click# 假设的LanguageModel类(在实际应用中,需要替换为真实的模型调用代码)
class LanguageModel:# ...(与上面相同)# 定义命令行接口的主函数
@click.group()
def cli():pass# ...(之前的greet和add命令可以与这里保持不变)# 定义一个命令来启动与大语言模型的对话
@cli.command()
def chat():"""与大语言模型进行对话"""model = LanguageModel()  # 初始化模型print("开始与大语言模型对话。输入'exit'退出对话。")while True:# 获取用户输入user_input = input("你: ")# 检查是否要退出对话if user_input.lower() == 'exit':print("对话结束。")break# 获取模型的响应model_response = model.respond(user_input)# 显示模型的响应print(f"模型: {model_response}")# 运行命令行接口
if __name__ == '__main__':cli()

6.3 代码说明

  • LanguageModel:这是一个简化的模拟类,用于模拟与大语言模型的交互。在实际应用中,你需要将其替换为调用真实大语言模型API的代码。
  • chat命令:这个命令使用了一个无限循环来与用户进行对话,直到用户输入'exit'为止。在每次循环中,它接收用户的输入,调用LanguageModelrespond方法来获取模型的响应,并显示给用户。
  • 用户交互:用户可以通过命令行与模型进行交互,输入文本并接收模型的响应。输入'exit'可以结束对话。

6.4 运行示例

将上述代码保存为cli_app_with_chat.py,然后在命令行中运行以下命令启动CLI应用:

python cli_app_with_chat.py chat

输出示例(由于模拟的LanguageModel只是将输入反转,因此响应将是输入的反转字符串):

开始与大语言模型对话。输入'exit'退出对话。
你: 你好!
模型: !好你
你: 今天天气怎么样?
模型: ?么怎样气天今
你: exit
对话结束。

请注意,由于这是一个模拟示例,因此模型的响应非常简单且不符合实际大语言模型的输出。在实际应用中,你需要将LanguageModel类替换为能够调用真实大语言模型API的代码,并处理API的响应以生成有意义的对话。

结语

通过本章节的扩展,我们向CLI应用中添加了一个与大语言模型进行对话的功能。虽然这里使用的是一个简化的模拟类,但你可以根据实际需求将其替换为调用真实大语言模型API的代码。希望这个示例能够帮助你理解如何在CLI应用中集成大语言模型对话功能,并激发你进一步探索和开发基于CLI的交互式应用的灵感。

5. 结语

Click是一个强大且灵活的命令行界面开发工具,它简化了命令行应用程序的开发流程,同时提供了丰富的功能和灵活的扩展机制。通过本文的介绍,相信你已经对Click库有了初步的了解,并开始尝试用它来构建自己的命令行工具。希望这能够提升你的工作效率和开发体验。

相关文章:

如何实现一个CLI命令行功能 | python 小知识

如何实现一个CLI命令行功能 | python 小知识 在现代软件开发中,命令行界面(CLI)的设计与交互至关重要。Click是一个强大的Python库,专门用于快速创建命令行界面,以其简单易用性和丰富的功能赢得了开发者的青睐。本文将…...

基于Python的药物相互作用预测模型AI构建与优化(上.文字部分)

一、引言 1.1 研究背景与意义 在临床用药过程中,药物相互作用(Drug - Drug Interaction, DDI)是一个不可忽视的重要问题。当患者同时服用两种或两种以上药物时,药物之间可能会发生相互作用,从而改变药物的疗效、增加不良反应的发生风险,甚至危及患者的生命安全。例如,…...

Linux环境下的Java项目部署技巧:环境安装

安装 JDK: 第上传 jdk 压缩安装包到服务器 将压缩安装包解压缩: tar -xvf jdk-8uXXX-linux-x64.tar.gz 配置环境变量: 编辑 /etc/profile 文件,在文件末尾添加以下内容: export JAVA_HOME/path/to/jdk //JAVA_HOME…...

【系统迁移】将系统迁移到新硬盘中(G15 5520)

文章目录 前言问题描述解决步骤(红色为 debug 步骤)参考文献 前言 参数: 电脑 dell g15 5520硬盘:1T 自带硬盘 海力士 2230 -> 2T 西数蓝盘 2280 问题描述 电脑硬盘过小(且只有一个接口),将…...

pytorch实现主成分分析 (PCA):用于数据降维和特征提取

人工智能例子汇总:AI常见的算法和例子-CSDN博客 使用 PyTorch 实现主成分分析(PCA)可以通过以下步骤进行: 标准化数据:首先,需要对数据进行标准化处理,确保每个特征的均值为 0,方差…...

跨越通信障碍:深入了解ZeroMQ的魅力

在复杂的分布式系统开发中,进程间通信就像一座桥梁,连接着各个独立运行的进程,让它们能够协同工作。然而,传统的通信方式往往伴随着复杂的设置、高昂的性能开销以及有限的灵活性,成为了开发者们前进道路上的 “绊脚石”…...

pytorch实现文本摘要

人工智能例子汇总:AI常见的算法和例子-CSDN博客 import numpy as npfrom modelscope.hub.snapshot_download import snapshot_download from transformers import BertTokenizer, BertModel import torch# 下载模型到本地目录 model_dir snapshot_download(tians…...

小智 AI 聊天机器人

小智 AI 聊天机器人 (XiaoZhi AI Chatbot) 👉参考源项目复现 👉 ESP32SenseVoiceQwen72B打造你的AI聊天伴侣!【bilibili】 👉 手工打造你的 AI 女友,新手入门教程【bilibili】 项目目的 本…...

MySql运维篇---008:日志:错误日志、二进制日志、查询日志、慢查询日志,主从复制:概述 虚拟机更改ip注意事项

#先登录mysql mysql -uroot -p1234#通过此系统变量,查看当前mysql的版本中默认的日志格式是哪个 show variables like %binlog\_format%;1.2.3 查看 由于日志是以二进制方式存储的,不能直接读取,需要通过二进制日志查询工具 mysqlbinlog 来查…...

理解DeepSeek源代码之如何安装triton包

DeepSeek选择了开源路线,在github上可以下载到所有的源代码还有参数(数据集应该没有开源),大语言模型的源代码规模其实非常小,DeepSeek V3的模型函数不过804行,阅读源代码有助于更好理解大语言模型。 1. D…...

C++ Primer 标准库类型string

欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…...

网站快速收录:如何优化网站视频内容?

本文转自:百万收录网 原文链接:https://www.baiwanshoulu.com/57.html 为了优化网站视频内容以实现快速收录,以下是一些关键的策略和步骤: 一、高质量内容创作 原创性: 确保视频内容是原创的,避免抄袭或…...

医学图像分割任务的测试代码

测试集进行测试 import os import torch import numpy as np from torch.utils.data import DataLoader from sklearn.metrics import (precision_score,recall_score,f1_score,roc_curve,auc,confusion_matrix, ) import matplotlib.pyplot as plt from utils import NiiData…...

放假前的最后一天

放假前的最后一天了,公司里基本没啥人了。上午整理了整理周报和节后上班要干的事儿。说是下午不用上班了,但是一直没有正式通知。中午出来,准备吃个饭,想吃公司附近的那个驻京办的饭,之前都是一直要排队,因…...

FFmpeg源码:av_base64_decode函数分析

一、引言 Base64(基底64)是一种基于64个可打印字符来表示二进制数据的表示方法。由于log2 646,所以每6个比特为一个单元,对应某个可打印字符。3个字节相当于24个比特,对应于4个Base64单元,即3个字节可由4个…...

为AI聊天工具添加一个知识系统 之83 详细设计之24 度量空间之1 因果关系和过程:认知金字塔

本文要点 度量空间 在本项目(为AI聊天工具添加一个知识系统 )中 是出于对“用”的考量 来考虑的。这包括: 相对-位置 力用(“相”)。正如 法力,相关-速度 体用 (“体”)。例如 重…...

如何配置Java JDK

步骤1:点击资源,点击Java下载 https://www.oracle.com/ 步骤2:点击java下载、JDK23下载,下载第一行第一个 步骤3:解压到一个空文件夹下,复制lib地址 步骤4:在设置里面搜索“高级系统设置”;点击…...

蓝桥杯例题六

奋斗是一种态度,也是一种生活方式。无论我们面对什么样的困难和挑战,只要心怀梦想,坚持不懈地努力,就一定能够迈向成功的道路。每一次失败都是一次宝贵的经验,每一次挫折都是一次锻炼的机会。在困难面前,我…...

MVS pythonSamples 运行环境配置

1.首先计算机:操作系统Win10_X64 22H2; 2.MVS V4.4.0 3.python3.8.8_64; 安装时勾选添加path; 最后安装依赖包:(所有必须安装) 图像处理: mvtec-halcon23050(可选) p…...

深度学习查漏补缺:2. 三个指标和注意力机制

一、bachsize, num_epochs, dataset 在训练卷积神经网络(CNN)或任何其他深度学习模型时,有几个关键参数和概念需要了解:batch size、num epochs 和 dataset。下面是对它们的详细解释: Batch Size(批量大小&…...

CodeGPT使用本地部署DeepSeek Coder

目前NV和github都托管了DeepSeek,生成Key后可以很方便的用CodeGPT接入。CodeGPT有三种方式使用AI,分别时Agents,Local LLMs(本地部署AI大模型),LLMs Cloud Model(云端大模型,从你自己…...

Python3 + Qt5:实现AJAX异步更新UI

使用 Python 和 Qt5 开发时异步加载数据的方法 在开发使用 Python 和 Qt5 的应用程序时,为了避免在加载数据时界面卡顿,可以采用异步加载的方式。以下是几种实现异步加载的方法: 1. 使用多线程(QThread) 通过将数据…...

JAVA安全—反射机制攻击链类对象成员变量方法构造方法

前言 还是JAVA安全,哎,真的讲不完,太多啦。 今天主要是讲一下JAVA中的反射机制,因为反序列化的利用基本都是要用到这个反射机制,还有一些攻击链条的构造,也会用到,所以就讲一下。 什么是反射…...

【深度学习】softmax回归的简洁实现

softmax回归的简洁实现 我们发现(通过深度学习框架的高级API能够使实现)(softmax)线性(回归变得更加容易)。 同样,通过深度学习框架的高级API也能更方便地实现softmax回归模型。 本节继续使用Fashion-MNIST数据集,并保持批量大小为256。 import torch …...

基础篇03-图像的基本运算

本节将简要介绍Halcon中有关图像的两类基本运算,分别是代数运算和逻辑运算。除此之外,还介绍几种特殊的代数运算。 目录 1.引言 2. 基本运算 2.1 加法运算 2.2 减法运算 2.3 乘法运算 2.4 除法运算 2.5 综合实例 3. 逻辑运算 3.1 逻辑与运算 …...

工具的应用——安装copilot

一、介绍Copilot copilot是一个AI辅助编程的助手,作为需要拥抱AI的程序员可以从此尝试进入,至于好与不好,应当是小马过河,各有各的心得。这里不做评述。重点在安装copilot的过程中遇到了一些问题,然后把它总结下&…...

面试问题知识

文章目录 1. Linux 和 CentOS基础指令:VMware 和 CentOS:扩充问题: 2. 前端开发(JS、CSS)JavaScript:CSS:扩充问题: 3. 数据库(MySQL)基础语法:事…...

Alibaba开发规范_编程规约之命名风格

文章目录 命名风格的基本原则1. 命名不能以下划线或美元符号开始或结束2. 严禁使用拼音与英文混合或直接使用中文3. 类名使用 UpperCamelCase 风格,但以下情形例外:DO / BO / DTO / VO / AO / PO / UID 等4. 方法名、参数名、成员变量、局部变量使用 low…...

MATLAB中的IIR滤波器设计

在数字信号处理中,滤波器是消除噪声、提取特征或调整信号频率的核心工具。其中,无限脉冲响应(IIR)滤波器因其低阶数实现陡峭滚降的特性,被广泛应用于音频处理、通信系统和生物医学工程等领域。借助MATLAB强大的工具箱&…...

vector容器(详解)

本文最后是模拟实现全部讲解,文章穿插有彩色字体,是我总结的技巧和关键 1.vector的介绍及使用 1.1 vector的介绍 https://cplusplus.com/reference/vector/vector/(vector的介绍) 了解 1. vector是表示可变大小数组的序列容器。…...