如何实现一个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.mzph.cn/news/894411.shtml

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

相关文章

LLMs之OpenAI o系列:OpenAI o3-mini的简介、安装和使用方法、案例应用之详细攻略

LLMs之OpenAI o系列:OpenAI o3-mini的简介、安装和使用方法、案例应用之详细攻略 目录 相关文章 LLMs之o3:《Deliberative Alignment: Reasoning Enables Safer Language Models》翻译与解读 LLMs之OpenAI o系列:OpenAI o3-mini的简介、安…

AI开发学习之——PyTorch框架

PyTorch 简介 PyTorch (Python torch)是由 Facebook AI 研究团队开发的开源机器学习库,广泛应用于深度学习研究和生产。它以动态计算图和易用性著称,支持 GPU 加速计算,并提供丰富的工具和模块。 PyTorch的主要特点 …

Python安居客二手小区数据爬取(2025年)

目录 2025年安居客二手小区数据爬取观察目标网页观察详情页数据准备工作:安装装备就像打游戏代码详解:每行代码都是你的小兵完整代码大放送爬取结果 2025年安居客二手小区数据爬取 这段时间需要爬取安居客二手小区数据,看了一下相关教程基本…

OpenCV:开运算

目录 1. 简述 2. 用腐蚀和膨胀实现开运算 2.1 代码示例 2.2 运行结果 3. 开运算接口 3.1 参数详解 3.2 代码示例 3.3 运行结果 4. 开运算应用场景 5. 注意事项 6. 总结 相关阅读 OpenCV:图像的腐蚀与膨胀-CSDN博客 OpenCV:闭运算-CSDN博客 …

JavaWeb入门-请求响应(Day3)

(一)请求响应概述 请求(HttpServletRequest):获取请求数据 响应(HttpServletResponse):设置响应数据 BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器就可访问,应用程序的逻辑和数据都存储在服务端(维护方便,响应速度一般) CS架构:Client/ser…

【SLAM】于AutoDL云上GPU运行GCNv2_SLAM的记录

配置GCNv2_SLAM所需环境并实现AutoDL云端运行项目的全过程记录。 本文首发于❄慕雪的寒舍 1. 引子 前几天写了一篇在本地虚拟机里面CPU运行GCNv2_SLAM项目的博客:链接,关于GCNv2_SLAM项目相关的介绍请移步此文章,本文不再重复说明。 GCNv2:…

罗格斯大学:通过输入嵌入对齐选择agent

📖标题:AgentRec: Agent Recommendation Using Sentence Embeddings Aligned to Human Feedback 🌐来源:arXiv, 2501.13333 🌟摘要 🔸多代理系统必须决定哪个代理最适合给定的任务。我们提出了一种新的架…

团体程序设计天梯赛-练习集——L1-025 正整数A+B

一年之际在于春,新年的第一天,大家敲代码了吗?哈哈 前言 这道题分值是15分,值这个分,有一小点运算,难度不大,虽然说做出来了,但是有两个小疑点。 L1-025 正整数AB 题的目标很简单…

Leetcode:598

1,题目 2,思路 脑筋急转弯,看题目一时半会还没搞懂意思。 其实不然就是说ops是个矩阵集合,集合的每个矩阵有俩个元素理解为行列边距 m和n是理解为一个主矩阵,计算ops的每个小矩阵还有这个主矩阵的交集返回面积 3&…

web前端12--表单和表格

1、表格标签 使用<table>标签来定义表格 HTML 中的表格和Excel中的表格是类似的&#xff0c;都包括行、列、单元格、表头等元素。 区别&#xff1a;HTML表格在功能方面远没有Excel表格强大&#xff0c;HTML表格不支持排序、求和、方差等数学计算&#xff0c;主要用于布…

【AI】探索自然语言处理(NLP):从基础到前沿技术及代码实践

Hi &#xff01; 云边有个稻草人-CSDN博客 必须有为成功付出代价的决心&#xff0c;然后想办法付出这个代价。 目录 引言 1. 什么是自然语言处理&#xff08;NLP&#xff09;&#xff1f; 2. NLP的基础技术 2.1 词袋模型&#xff08;Bag-of-Words&#xff0c;BoW&#xff…

第1章 量子暗网中的血色黎明

月球暗面的危机与阴谋 量子隧穿效应催生的幽蓝电弧&#xff0c;于环形山表面肆意跳跃&#xff0c;仿若无数奋力挣扎的机械蠕虫&#xff0c;将月球暗面的死寂打破&#xff0c;徒增几分诡异。艾丽伫立在被遗弃的“广寒宫”量子基站顶端&#xff0c;机械义眼之中&#xff0c;倒映着…

AI-ISP论文Learning to See in the Dark解读

论文地址&#xff1a;Learning to See in the Dark 图1. 利用卷积网络进行极微光成像。黑暗的室内环境。相机处的照度小于0.1勒克斯。索尼α7S II传感器曝光时间为1/30秒。(a) 相机在ISO 8000下拍摄的图像。(b) 相机在ISO 409600下拍摄的图像。该图像存在噪点和色彩偏差。©…

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

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

使用 Spring JDBC 进行数据库操作:深入解析 JdbcTemplate

目录 1. Spring JDBC 简介 2. JdbcTemplate 介绍 3. 创建数据库和表 4. 配置 Spring JDBC 5. 创建实体类 6. 使用 JdbcTemplate 实现增、删、改、查操作 7. Spring JDBC 优点 8. 小结 1. Spring JDBC 简介 Spring JDBC 是 Spring 框架中的一个模块&#xff0c;旨在简化…

BUUCTF [Black Watch 入群题]PWN1 题解

1.下载文件 exeinfo checksec 32位 IDA32 看到关键函数 read两次 第一次read的变量s在bss段&#xff1b;第二次的buf到ebp距离为 24 但是第二次的read字节只能刚好填满返回地址 传不进去变量 所以想到栈迁移 将栈移动到变量s所在位置上来 同时 这题开了NX 无直接的binsh和s…

Cubemx文件系统挂载多设备

cubumx版本&#xff1a;6.13.0 芯片&#xff1a;STM32F407VET6 在上一篇文章中介绍了Cubemx的FATFS和SD卡的配置&#xff0c;由于SD卡使用的是SDIO通讯&#xff0c;因此具体驱动不需要自己实现&#xff0c;Cubemx中就可以直接配置然后生成SDIO的驱动&#xff0c;并将SD卡驱动和…

java练习(2)

回文数&#xff08;题目来自力扣&#xff09; 给你一个整数 x &#xff0c;如果 x 是一个回文整数&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 回文数 是指正序&#xff08;从左向右&#xff09;和倒序&#xff08;从右向左&#xff09;读都是一样的整…

使用 Tauri 2 + Next.js 开发跨平台桌面应用实践:Singbox GUI 实践

Singbox GUI 实践 最近用 Tauri Next.js 做了个项目 - Singbox GUI&#xff0c;是个给 sing-box 用的图形界面工具。支持 Windows、Linux 和 macOS。作为第一次接触这两个框架的新手&#xff0c;感觉收获还蛮多的&#xff0c;今天来分享下开发过程中的一些经验~ 为啥要做这个…

ComfyUI安装调用DeepSeek——DeepSeek多模态之图形模型安装问题解决(ComfyUI-Janus-Pro)

ComfyUI 的 Janus-Pro 节点&#xff0c;一个统一的多模态理解和生成框架。 试用&#xff1a; https://huggingface.co/spaces/deepseek-ai/Janus-1.3B https://huggingface.co/spaces/deepseek-ai/Janus-Pro-7B https://huggingface.co/spaces/deepseek-ai/JanusFlow-1.3B 安装…