Typer 命令行工具使用示例

Typer 命令行工具使用示例

示例1:簡單問候程序

代碼

import typerapp = typer.Typer()@app.command()
def greet(name: str):"""簡單的問候命令"""typer.echo(f"Hello {name}!")if __name__ == "__main__":app()

使用方式

# 輸入
python simple_greet.py John# 輸出
Hello John!

示例2:帶選項的問候程序

代碼

import typerapp = typer.Typer()@app.command()
def greet(name: str,formal: bool = typer.Option(False, "--formal", "-f", help="使用正式問候")
):"""帶選項的問候命令"""if formal:typer.echo(f"Good day, {name}.")else:typer.echo(f"Hello {name}!")if __name__ == "__main__":app()

使用方式

# 輸入1
python option_greet.py Alice# 輸出1
Hello Alice!# 輸入2
python option_greet.py Alice --formal# 輸出2
Good day, Alice.# 輸入3
python option_greet.py --help# 輸出3
Usage: option_greet.py [OPTIONS] NAME帶選項的問候命令Arguments:NAME  [required]Options:--formal, -f  使用正式問候  [default: False]--help         Show this message and exit.

示例3:復雜問候程序(用戶提供的示例)

代碼

import typer
from typing import Optionalapp = typer.Typer()@app.command()
def main(name: str,age: Optional[int] = typer.Argument(None, help="用戶的年齡"),formal: bool = typer.Option(False, "--formal", "-f", help="使用正式問候"),times: int = typer.Option(1, "--times", "-t", help="問候次數")
):"""一個簡單的問候程序"""greeting = f"Good day, {name}" if formal else f"Hello {name}"if age:greeting += f", you are {age} years old"for _ in range(times):typer.echo(greeting)if __name__ == "__main__":app()

使用方式

# 輸入1 - 基本問候
python complex_greet.py John# 輸出1
Hello John# 輸入2 - 帶年齡的問候
python complex_greet.py John 25# 輸出2
Hello John, you are 25 years old# 輸入3 - 正式問候
python complex_greet.py John --formal# 輸出3
Good day, John# 輸入4 - 多次問候
python complex_greet.py John --times 3# 輸出4
Hello John
Hello John
Hello John# 輸入5 - 組合所有選項
python complex_greet.py John 25 --formal --times 2# 輸出5
Good day, John, you are 25 years old
Good day, John, you are 25 years old# 輸入6 - 查看幫助
python complex_greet.py --help# 輸出6
Usage: complex_greet.py [OPTIONS] NAME [AGE]一個簡單的問候程序Arguments:NAME  [required][AGE]  用戶的年齡Options:--formal, -f      使用正式問候  [default: False]--times, -t INTEGER  問候次數  [default: 1]--help                Show this message and exit.

總結

  1. 位置參數:直接聲明,如 name: str
  2. 可選參數:使用 Optionaltyper.Argument,如 age: Optional[int] = typer.Argument(None)
  3. 選項參數:使用 typer.Option,可以設置短選項和長選項
  4. 幫助文檔:自動生成,可通過 --help 查看
  5. 參數順序:位置參數必須按順序提供,選項參數可以任意順序

Typer 讓創建功能豐富的命令行工具變得簡單直觀,只需使用 Python 類型提示即可自動處理參數解析和驗證。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/95512.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/95512.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/95512.shtml

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

相關文章

關于CAN總線bus off 理論標準 vs 工程實踐

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 做到欲望極簡,了解自己的真實欲望,不受外在潮流的影響,不盲從,不跟風。把自己的精力全部用在自己。一是去掉多余,凡事找規律,基礎是誠信;二是…

CAN堆棧

PDU映射到HOH將硬件對象句柄HOH抽象成為硬件抽象層CanIf將pdu映射到硬件對象句柄上一個HOH代表一個Can控制器的一個消息緩沖區發送緩存區當所有Can硬件資源被占用時,LPDU存儲在緩沖區中。發送取消為了解決優先級反轉的問題,高優先級L-PDU會請求取消低優先…

sub3G和sub6G的區別和聯系

Sub-3G 和 Sub-6G 的區別與聯系Sub-3G 和 Sub-6G 是無線通信中頻段的不同分類,尤其在4G LTE和5G網絡中,定義了無線信號傳輸的不同頻率范圍。具體來說,Sub-3G 通常指的是低于3 GHz的頻段,而 Sub-6G 是指低于6 GHz的頻段。這些頻段的…

【數據可視化-106】華為2025上半年財報分析:用Python和Pyecharts打造炫酷可視化大屏

🧑 博主簡介:曾任某智慧城市類企業算法總監,目前在美國市場的物流公司從事高級算法工程師一職,深耕人工智能領域,精通python數據挖掘、可視化、機器學習等,發表過AI相關的專利并多次在AI類比賽中獲獎。CSDN…

Scikit-learn Python機器學習 - 特征預處理 - 歸一化 (Normalization):MinMaxScaler

鋒哥原創的Scikit-learn Python機器學習視頻教程: 2026版 Scikit-learn Python機器學習 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili 課程介紹 本課程主要講解基于Scikit-learn的Python機器學習知識,包括機器學習概述,特征工程(數據…

LINUX_Ubunto學習《2》_shell指令學習、gitee

0、前言: 0.1、為什么學習shell腳本 學習Shell(Shell腳本編程)是提升系統管理和開發效率的重要技能,尤其在Linux/Unix環境中作用顯著。Shell是用戶與操作系統內核的接口,學習Shell有助于掌握系統工作原理。shell的核心…

系統安裝與遷移工具,一鍵下載系統并制作U盤啟動盤

大家好,今天想跟大家分享一款非常實用的軟件——Hasleo WinToUSB 下載地址獲取 點擊獲取:WinToUSB啟動盤 打開后的界面; image Windows To Go USB 可以安裝或克隆 Windows 到 USB 設備,作為便攜式 Windows 使用 可以選擇直接用…

日語學習-日語知識點小記-構建基礎-JLPT-N3階段(26):文法+單詞第8回3 復習 +考え方6

日語學習-日語知識點小記-構建基礎-JLPT-N3階段(26):文法單詞第8回3 復習1、前言(1)情況說明(2)工程師的信仰2、知識點1ー V辭書形 + ことができます。2ーこの橋、&am…

AM J BOT | 黃芪穩健骨架樹構建

Astragalus(黃芪屬,豆科,含約 3,400 種)是最大的被子植物屬之一,其多樣化在北半球多個地區的植被形成與生物多樣性格局中扮演了重要角色。然而,由于屬內物種數量龐大、形態復雜且演化歷史可能受到網狀進化的…

if __name__=‘__main__‘的用處

在 Python 中,if __name__ __main__:是一個常見的代碼模式,用于控制模塊的執行行為。它的核心作用是區分模塊是被直接運行還是被導入到其他文件中。作用詳解:?當文件被直接運行時?__name__會被自動設置為 __main__,此時 if塊內…

MySQL慢查詢優化策略

一、問題定位 1、慢查詢日志 -- 查看當前設置 SHOW VARIABLES LIKE slow_query%; ? -- 開啟慢查詢日志(my.cnf永久配置) [mysqld] slow_query_log 1 slow_query_log_file /var/log/mysql/slow.log long_query_time 1 -- 超過1秒的查詢 log_querie…

如何使用 ASP.NET Core 創建基于角色的 Web API

在使用 ASP.NET Core 構建基于角色的 Web API 時,代碼優先方法是一種強大而高效的方法。使用它,我們可以在代碼中定義數據模型和關系,然后自動生成相應的數據庫模式。這會帶來什么?當然是更快的開發周期和更大的靈活性。為什么&am…

無字母數字命令執行

寫在前面 說白了數字還是好構造的,bash的算數拓展! base64命令 這玩意說白了有點雞肋,因為你得知道flag的文件名和位置! base64 flag.php這個會將flag.php里面的內容給base64編碼輸出來。那么如何用無字母數字構造呢? …

AAB包轉apks轉apk

1. 下載bundletool-all-1.17.2.jar(不一定非得1.17.2,可以其他版本) https://github.com/google/bundletool/releases/tag/1.17.2 2. 在aab、keystore、bundletool-all-1.17.2.jar的目錄下,運行指令 java -jar bundletool-all-1…

從零開始:用uv構建并發布一個Python CLI應用,集成CI/CD自動化發布與Docker容器化部署

使用uv構建并發布一個完整的Python CLI應用 概述 初始化項目 編寫應用代碼 定義項目 (`pyproject.toml`) 使用`uv`安裝依賴 本地運行和測試 依賴鎖定 構建 發布 生產環境實踐之CI/CD 創建工作流配置文件 配置GitHub Secrets 創建和推送tag 驗證發布 生產環境實踐之Docker 創建D…

如何在Qt中使用周立功USB轉CAN卡

如何在 Qt 中使用周立功 USB 轉 CAN 卡 文章目錄如何在 Qt 中使用周立功 USB 轉 CAN 卡一、簡介二、準備工作三、使用四、運行效果五、寫在最后?一、簡介 最近在工程中用到了周立功的 USB 轉 CAN 卡,需求是要通過上位機進行通信,因此有了這篇文章。 有…

JavaScript 源碼剖析:從字節碼到執行的奇妙旅程

JavaScript,這門風靡全球的腳本語言,以其靈活性和跨平臺性征服了無數開發者。我們每天都在使用它,但它在后臺是如何工作的?一段看似簡單的JS代碼,在執行之前究竟經歷了哪些“變形記”?今天,讓我…

FPGA—硬件電路一旦上電配置完成,各個功能模塊會并行地持續工作

1.示例代碼參考這段代碼是用 Verilog 編寫的一個 LED 閃爍控制模塊,主要實現了 LED 按一定時間間隔循環移位閃爍的功能。下面詳細解釋其架構組成:模塊定義與端口聲明模塊名為 led_flash,包含三個端口:sys_clk:輸入端口…

從零到上線:Docker、Docker Compose 與 Runtime 安裝部署全指南(含實戰示例與應用場景)

文章目錄一、Docker 安裝1. Ubuntu / Debian(官方倉庫)2. RHEL / CentOS / Rocky / AlmaLinux3. 驗證4. macOS / Windows(Docker Desktop)二、Docker Compose(V2)安裝與基本用法1) 驗證2) 最小示例&#xf…

Java基礎篇02:基本語法

1 注釋 注釋是寫在程序中對代碼進行解釋說明的文字,方便自己和其他人查看,以便理解程序的。注釋分為三種:單行注釋、多行注釋、文檔注釋注釋不影響代碼的執行: 原因是編譯后的文件已經沒有注釋了// 這是單行注釋:。通常…