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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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 注释 注释是写在程序中对代码进行解释说明的文字,方便自己和其他人查看,以便理解程序的。注释分为三种:单行注释、多行注释、文档注释注释不影响代码的执行: 原因是编译后的文件已经没有注释了// 这是单行注释:。通常…