如何实现一个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库有了初步的了解,并开始尝试用它来构建自己的命令行工具。希望这能够提升你的工作效率和开发体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/11213.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

想品客老师的第天:类

类是一个优化js面向对象的工具 类的声明 //1、class User{}console.log(typeof User)//function//2、let Hdclass{}//其实跟1差不多class Stu{show(){}//注意这里不用加逗号,对象才加逗号get(){console.log(后盾人)}}let hdnew Stu()hd.get()//后盾人 类的原理 类…

【Git】初识Git Git基本操作详解

文章目录 学习目标Ⅰ. 初始 Git💥注意事项 Ⅱ. Git 安装Linux-centos安装Git Ⅲ. Git基本操作一、创建git本地仓库 -- git init二、配置 Git -- git config三、认识工作区、暂存区、版本库① 工作区② 暂存区③ 版本库④ 三者的关系 四、添加、提交更改、查看提交日…

基于单片机的盲人智能水杯系统(论文+源码)

1 总体方案设计 本次基于单片机的盲人智能水杯设计,采用的是DS18B20实现杯中水温的检测,采用HX711及应力片实现杯中水里的检测,采用DS1302实现时钟计时功能,采用TTS语音模块实现语音播报的功能,并结合STC89C52单片机作…

深入解析“legit”的地道用法——从俚语到正式表达:Sam Altman用来形容DeepSeek: legit invigorating(真的令人振奋)

深入解析“legit”的地道用法——从俚语到正式表达 一、引言 在社交媒体、科技圈甚至日常对话中,我们经常会看到或听到“legit”这个词。比如最近 Sam Altman 在 X(原 Twitter)上发的一条帖子中写道: we will obviously deliver …

微机原理与接口技术期末大作业——4位抢答器仿真

在微机原理与接口技术的学习旅程中,期末大作业成为了检验知识掌握程度与实践能力的关键环节。本次我选择设计并仿真一个 4 位抢答器系统,通过这个项目,深入探索 8086CPU 及其接口技术的实际应用。附完整压缩包下载。 一、系统设计思路 &…

【大模型LLM面试合集】大语言模型架构_MHA_MQA_GQA

MHA_MQA_GQA 1.总结 在 MHA(Multi Head Attention) 中,每个头有自己单独的 key-value 对;标准的多头注意力机制,h个Query、Key 和 Value 矩阵。在 MQA(Multi Query Attention) 中只会有一组 k…

【Transformer】手撕Attention

import torch from torch import nn import torch.functional as F import mathX torch.randn(16,64,512) # B,T,Dd_model 512 # 模型的维度 n_head 8 # 注意力头的数量多头注意力机制 class multi_head_attention(nn.Module): def __init__(self, d_model, n_hea…

【Linux】 冯诺依曼体系与计算机系统架构全解

Linux相关知识点可以通过点击以下链接进行学习一起加油!初识指令指令进阶权限管理yum包管理与vim编辑器GCC/G编译器make与Makefile自动化构建GDB调试器与Git版本控制工具Linux下进度条 冯诺依曼体系是现代计算机设计的基石,其统一存储和顺序执行理念推动…

冯·诺依曼体系结构

目录 冯诺依曼体系结构推导 内存提高冯诺依曼体系结构效率的方法 你使用QQ和朋友聊天时,整个数据流是怎么流动的(不考虑网络情况) 与冯诺依曼体系结构相关的一些知识 冯诺依曼体系结构推导 计算机的存在就是为了解决问题,而解…

全面认识了解DeepSeek+利用ollama在本地部署、使用和体验deepseek-r1大模型

文章目录 一、DeepSeek简介二、技术特点三、架构设计3.1、DeepSeek-V33.2、DeepSeek-V23.3、DeepSeek-R1 四、DeepSeek算法4.1、DeepSeek LLM 算法4.2、DeepSeek-V2 算法4.3、DeepSeek-R1 算法4.4、DeepSeek 在算力优化上的算法 五、DeepSeek的使用六、本地部署DeepSeek R1模型…

Python 梯度下降法(七):Summary

文章目录 Python 梯度下降法(七):Summary一、核心思想1.1 核心思想1.2 优化方法概述1.3 第三方库的使用 二、 BGD2.1 介绍2.2 torch 库算法2.2 代码示例2.3 SGD2.4 SGD代码示例2.5 MBGD2.6 MBGD 代码示例 三、 Adagrad3.1 介绍3.2 torch 库算…

SpringBoot Web开发(SpringMVC)

SpringBoot Web开发(SpringMVC) MVC 核心组件和调用流程 Spring MVC与许多其他Web框架一样,是围绕前端控制器模式设计的,其中中央 Servlet DispatcherServlet 做整体请求处理调度! . 除了DispatcherServletSpringMVC还会提供其他…

Web_php_unserialize

代码审计 <?php class Demo { private $file index.php;public function __construct($file) { $this->file $file; }、 //接收一个参数 $file 并赋值给私有属性 $filefunction __destruct() { echo highlight_file($this->file, true); } //在对象销毁时调用&…

Spring Web MVC基础第一篇

目录 1.什么是Spring Web MVC&#xff1f; 2.创建Spring Web MVC项目 3.注解使用 3.1RequestMapping&#xff08;路由映射&#xff09; 3.2一般参数传递 3.3RequestParam&#xff08;参数重命名&#xff09; 3.4RequestBody&#xff08;传递JSON数据&#xff09; 3.5Pa…

安装anaconda3 后 电脑如何单独运行python,python还需要独立安装吗?

安装anaconda3 后 电脑如何单独运行python&#xff0c;python还需要独立安装吗? 电脑第一此安装anaconda用于jupyter notebook使用。 但是在运行cmd的时候&#xff0c;输入python --version 显示未安装或跳转商店提示安装。 明明我可以运行python但是为什么cmd却说我没安装呢…

分布式事务组件Seata简介与使用,搭配Nacos统一管理服务端和客户端配置

文章目录 一. Seata简介二. 官方文档三. Seata分布式事务代码实现0. 环境简介1. 添加undo_log表2. 添加依赖3. 添加配置4. 开启Seata事务管理5. 启动演示 四. Seata Server配置Nacos1. 修改配置类型2. 创建Nacos配置 五. Seata Client配置Nacos1. 增加Seata关联Nacos的配置2. 在…

使用真实 Elasticsearch 进行高级集成测试

作者&#xff1a;来自 Elastic Piotr Przybyl 掌握高级 Elasticsearch 集成测试&#xff1a;更快、更智能、更优化。 在上一篇关于集成测试的文章中&#xff0c;我们介绍了如何通过改变数据初始化策略来缩短依赖于真实 Elasticsearch 的集成测试的执行时间。在本期中&#xff0…

OpenEuler学习笔记(十四):在OpenEuler上搭建.NET运行环境

一、在OpenEuler上搭建.NET运行环境 基于包管理器安装 添加Microsoft软件源&#xff1a;运行命令sudo rpm -Uvh https://packages.microsoft.com/config/centos/8/packages-microsoft-prod.rpm&#xff0c;将Microsoft软件源添加到系统中&#xff0c;以便后续能够从该源安装.…

基于Python的简单企业维修管理系统的设计与实现

以下是一个基于Python的简单企业维修管理系统的设计与实现&#xff0c;这里我们会使用Flask作为Web框架&#xff0c;SQLite作为数据库来存储相关信息。 1. 需求分析 企业维修管理系统主要功能包括&#xff1a; 维修工单的创建、查询、更新和删除。设备信息的管理。维修人员…

Van-Nav:新年,将自己学习的项目地址统一整理搭建自己的私人导航站,供自己后续查阅使用,做技术的同学应该都有一个自己网站的梦想

嗨&#xff0c;大家好&#xff0c;我是小华同学&#xff0c;关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 Van-Nav是一个基于Vue.js开发的导航组件库&#xff0c;它提供了多种预设的样式和灵活的配置选项&#xff0c;使得开发者可以轻松地定制出符合项目需求…