如何實現一個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.pswp.cn/news/894411.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/894411.shtml
英文地址,請注明出處:http://en.pswp.cn/news/894411.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[SAP ABAP] Debug Skill

SAP ABAP Debug相關資料 [SAP ABAP] DEBUG ABAP程序中的循環語句 [SAP ABAP] 靜態斷點的使用 [SAP ABAP] 在ABAP Debugger調試器中設置斷點 [SAP ABAP] SE11 / SE16N 修改標準表(慎用)

kamailio-Core 說明書 版本:Kamailio SIP Server v6.0.x(穩定版)

Core 說明書 版本:Kamailio SIP Server v6.0.x(穩定版) 概述 本教程收集了 Kamailio 導出的函數和參數 core 添加到配置文件中。 注意:此頁面上的參數不按字母順序排列。 結構 kamailio.cfg 的結構可以看作是三個部分&#xff…

.Net / C# 繁體中文 與 簡體中文 互相轉換, 支持地方特色詞匯

版本號 Nuget 搜索 “OpenCCNET”, 注意別找錯, 好多庫的名字都差不多 支持 “繁,簡” 的互相轉換, 支持多個地區常用詞匯的轉換, 還支持 日文的新舊轉換. OpenCC 在 .Net 中的實現 https://github.com/CosineG/OpenCC.NET <PackageReference Include"OpenCCNET"…

Redis腦裂問題詳解及解決方案

Redis是一種高性能的內存數據庫&#xff0c;廣泛應用于緩存、消息隊列等場景。然而&#xff0c;在分布式Redis集群中&#xff0c;腦裂問題&#xff08;Split-Brain&#xff09;是一個需要特別關注的復雜問題。本文將詳細介紹Redis腦裂問題的成因、影響及解決方案。 一、什么是…

LLMs之OpenAI o系列:OpenAI o3-mini的簡介、安裝和使用方法、案例應用之詳細攻略

LLMs之OpenAI o系列&#xff1a;OpenAI o3-mini的簡介、安裝和使用方法、案例應用之詳細攻略 目錄 相關文章 LLMs之o3&#xff1a;《Deliberative Alignment: Reasoning Enables Safer Language Models》翻譯與解讀 LLMs之OpenAI o系列&#xff1a;OpenAI o3-mini的簡介、安…

女生年薪12萬,算不算屬于高收入人群

在繁華喧囂的都市中&#xff0c;我們時常會聽到關于收入、高薪與生活質量等話題的討論。尤其是對于年輕女性而言&#xff0c;薪資水平不僅關乎個人價值的體現&#xff0c;更直接影響到生活質量與未來的規劃。那么&#xff0c;女生年薪12萬&#xff0c;是否可以被劃入高收入人群…

AI開發學習之——PyTorch框架

PyTorch 簡介 PyTorch &#xff08;Python torch&#xff09;是由 Facebook AI 研究團隊開發的開源機器學習庫&#xff0c;廣泛應用于深度學習研究和生產。它以動態計算圖和易用性著稱&#xff0c;支持 GPU 加速計算&#xff0c;并提供豐富的工具和模塊。 PyTorch的主要特點 …

Python安居客二手小區數據爬取(2025年)

目錄 2025年安居客二手小區數據爬取觀察目標網頁觀察詳情頁數據準備工作&#xff1a;安裝裝備就像打游戲代碼詳解&#xff1a;每行代碼都是你的小兵完整代碼大放送爬取結果 2025年安居客二手小區數據爬取 這段時間需要爬取安居客二手小區數據&#xff0c;看了一下相關教程基本…

OpenCV:開運算

目錄 1. 簡述 2. 用腐蝕和膨脹實現開運算 2.1 代碼示例 2.2 運行結果 3. 開運算接口 3.1 參數詳解 3.2 代碼示例 3.3 運行結果 4. 開運算應用場景 5. 注意事項 6. 總結 相關閱讀 OpenCV&#xff1a;圖像的腐蝕與膨脹-CSDN博客 OpenCV&#xff1a;閉運算-CSDN博客 …

JavaWeb入門-請求響應(Day3)

(一)請求響應概述 請求(HttpServletRequest):獲取請求數據 響應(HttpServletResponse):設置響應數據 BS架構:Browser/Server,瀏覽器/服務器架構模式。客戶端只需要瀏覽器就可訪問,應用程序的邏輯和數據都存儲在服務端(維護方便,響應速度一般) CS架構:Client/ser…

【SLAM】于AutoDL云上GPU運行GCNv2_SLAM的記錄

配置GCNv2_SLAM所需環境并實現AutoDL云端運行項目的全過程記錄。 本文首發于?慕雪的寒舍 1. 引子 前幾天寫了一篇在本地虛擬機里面CPU運行GCNv2_SLAM項目的博客&#xff1a;鏈接&#xff0c;關于GCNv2_SLAM項目相關的介紹請移步此文章&#xff0c;本文不再重復說明。 GCNv2:…

羅格斯大學:通過輸入嵌入對齊選擇agent

&#x1f4d6;標題&#xff1a;AgentRec: Agent Recommendation Using Sentence Embeddings Aligned to Human Feedback &#x1f310;來源&#xff1a;arXiv, 2501.13333 &#x1f31f;摘要 &#x1f538;多代理系統必須決定哪個代理最適合給定的任務。我們提出了一種新的架…

【實戰篇】Android安卓本地離線實現視頻檢測人臉

實戰篇Android安卓本地離線實現視頻檢測人臉 引言項目概述核心代碼類介紹人臉檢測流程項目地址總結 引言 在當今數字化時代&#xff0c;人臉識別技術已經廣泛應用于各個領域&#xff0c;如安防監控、門禁系統、移動支付等。本文將以第三視角詳細講解如何基于bifan-wei-Face/De…

團體程序設計天梯賽-練習集——L1-025 正整數A+B

一年之際在于春&#xff0c;新年的第一天&#xff0c;大家敲代碼了嗎&#xff1f;哈哈 前言 這道題分值是15分&#xff0c;值這個分&#xff0c;有一小點運算&#xff0c;難度不大&#xff0c;雖然說做出來了&#xff0c;但是有兩個小疑點。 L1-025 正整數AB 題的目標很簡單…

Leetcode:598

1&#xff0c;題目 2&#xff0c;思路 腦筋急轉彎&#xff0c;看題目一時半會還沒搞懂意思。 其實不然就是說ops是個矩陣集合&#xff0c;集合的每個矩陣有倆個元素理解為行列邊距 m和n是理解為一個主矩陣&#xff0c;計算ops的每個小矩陣還有這個主矩陣的交集返回面積 3&…

web前端12--表單和表格

1、表格標簽 使用<table>標簽來定義表格 HTML 中的表格和Excel中的表格是類似的&#xff0c;都包括行、列、單元格、表頭等元素。 區別&#xff1a;HTML表格在功能方面遠沒有Excel表格強大&#xff0c;HTML表格不支持排序、求和、方差等數學計算&#xff0c;主要用于布…

為何 git 默認是 master分支,而github默認是main分支(DeepSeek問答)

為何 git 默認是 master分支&#xff0c;而github默認是main分支 Git 和 GitHub 在默認分支名稱上的差異源于歷史背景和社會因素的變化。 Git 的 master 分支 歷史原因&#xff1a;Git 由 Linus Torvalds 于 2005 年創建&#xff0c;最初使用 master 作為默認分支名稱&#x…

【AI】探索自然語言處理(NLP):從基礎到前沿技術及代碼實踐

Hi &#xff01; 云邊有個稻草人-CSDN博客 必須有為成功付出代價的決心&#xff0c;然后想辦法付出這個代價。 目錄 引言 1. 什么是自然語言處理&#xff08;NLP&#xff09;&#xff1f; 2. NLP的基礎技術 2.1 詞袋模型&#xff08;Bag-of-Words&#xff0c;BoW&#xff…

Java集合+并發(部分)

Java集合 Java集合類的繼承結構和各自的適用情況 Collection ? — List ? — ArrayList&#xff1a;動態數組 ? — LinkedList&#xff1a;底層是雙向鏈表&#xff0c;應用于Queue接口可以用于實現隊列&#xff0c;應用于Deque接口可以用于實現棧 ? — Vector&#x…

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

月球暗面的危機與陰謀 量子隧穿效應催生的幽藍電弧&#xff0c;于環形山表面肆意跳躍&#xff0c;仿若無數奮力掙扎的機械蠕蟲&#xff0c;將月球暗面的死寂打破&#xff0c;徒增幾分詭異。艾麗佇立在被遺棄的“廣寒宮”量子基站頂端&#xff0c;機械義眼之中&#xff0c;倒映著…