news 2026/10/14 10:09:11

HoRain云--Python命令行工具开发:argparse、Click与Typer

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HoRain云--Python命令行工具开发:argparse、Click与Typer

命令行工具是自动化运维、脚手架的核心。本文对比argparse、Click、Typer三种方案,并实战开发一个CLI工具。

一、argparse基础

python

复制

下载

import argparse parser = argparse.ArgumentParser(description="文件处理工具") parser.add_argument("filename", help="输入文件") parser.add_argument("-o", "--output", default="out.txt", help="输出文件") parser.add_argument("-v", "--verbose", action="store_true") parser.add_argument("-n", "--num", type=int, default=10) args = parser.parse_args() print(args.filename, args.output, args.verbose, args.num)

二、子命令

python

复制

下载

parser = argparse.ArgumentParser() subparsers = parser.add_subparsers(dest="command") create = subparsers.add_parser("create") create.add_argument("name") delete = subparsers.add_parser("delete") delete.add_argument("name") args = parser.parse_args() if args.command == "create": print(f"创建 {args.name}") elif args.command == "delete": print(f"删除 {args.name}")

三、Click

python

复制

下载

import click @click.group() def cli(): pass @cli.command() @click.argument("name") @click.option("--age", default=18, help="年龄") def greet(name, age): click.echo(f"Hello {name}, age {age}") @cli.command() @click.option("--count", default=1) def repeat(count): for _ in range(count): click.echo("Hello") if __name__ == "__main__": cli()

四、Typer(推荐)

Typer基于类型注解,代码更简洁。

python

复制

下载

import typer from typing import Optional app = typer.Typer() @app.command() def greet(name: str, age: int = 18, verbose: bool = False): """向用户问好""" if verbose: typer.echo(f"详细模式") typer.echo(f"Hello {name}, age {age}") @app.command() def add(a: int, b: int): """两数相加""" typer.echo(a + b) if __name__ == "__main__": app()

五、彩色输出

python

复制

下载

from rich.console import Console from rich.table import Table console = Console() console.print("[bold red]错误[/bold red]: 文件不存在") console.print("[green]成功[/green]") table = Table(title="用户列表") table.add_column("ID") table.add_column("姓名") table.add_row("1", "Tom") table.add_row("2", "Jerry") console.print(table)

六、进度条

python

复制

下载

from rich.progress import track import time for i in track(range(100), description="处理中..."): time.sleep(0.01)

或tqdm:

python

复制

下载

from tqdm import tqdm for i in tqdm(range(100)): time.sleep(0.01)

七、配置文件

python

复制

下载

import typer from pydantic_settings import BaseSettings class Settings(BaseSettings): api_key: str = "" timeout: int = 30 @app.command() def run(config: str = "config.json"): settings = Settings() typer.echo(settings.api_key)

八、打包发布

pyproject.toml:

toml

复制

下载

[project.scripts] mytool = "mytool.cli:app" [tool.poetry] name = "mytool" version = "0.1.0"

安装后可直接命令行调用:

bash

复制

下载

pip install -e . mytool greet Tom

九、实战:文件批量重命名工具

python

复制

下载

import typer from pathlib import Path app = typer.Typer() @app.command() def rename( directory: Path, pattern: str = "*.jpg", prefix: str = "img_", dry_run: bool = False, ): """批量重命名文件""" files = sorted(directory.glob(pattern)) for i, f in enumerate(files, 1): new_name = f.parent / f"{prefix}{i:04d}{f.suffix}" if dry_run: typer.echo(f"{f} -> {new_name}") else: f.rename(new_name) typer.echo(f"重命名: {new_name}") if __name__ == "__main__": app()

十、总结

argparse是标准库,Click功能强大,Typer最简洁。推荐新项目用Typer + Rich,能快速开发出专业级CLI工具。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 10:09:07

Android混合开发中Compose与自定义View状态联动实践

1. 问题背景与核心挑战 在Android混合开发场景中,我们经常遇到传统自定义View与Jetpack Compose状态联动的需求。比如一个自定义的环形进度条需要响应Compose侧的数值变化,或者一个手写签名板需要将绘制结果反馈给Compose状态。这种跨范式交互涉及三个关…

作者头像 李华
网站建设 2026/10/14 10:09:01

LVS、VRRP与ECMP三层协同原理与高可用配置实践

1. 项目概述:LVS、VRRP与ECMP不是“三选一”,而是三层协同的网络底座你看到这个标题,第一反应可能是:“这仨词怎么凑一块儿了?”——别急,这不是拼凑,而是真实生产环境中每天都在发生的底层协作…

作者头像 李华
网站建设 2026/10/14 10:08:49

Agent技能体系设计与实践:从定义到调用链路完整拆解

直接进入正题。这两年做大模型应用,最深的体会就是:模型能力是一回事,把模型变成一个能干活的Agent是另一回事。很多团队拿着一个很强的基座模型,做出来的Demo效果也不错,但一上真实业务就露馅——要么工具调用混乱&am…

作者头像 李华
网站建设 2026/10/14 10:08:21

SSM+微信小程序设备报修系统实战部署指南

简介:本资源是一套高分毕业设计级的设备故障报修管理系统,面向计算机专业本科生、课程设计与毕设学生,解决企业设备运维中报修流程低效、响应滞后、数据分散等实际问题。系统采用JavaSSM后端框架,MySQL 5.7数据库,前端…

作者头像 李华
网站建设 2026/10/14 10:07:35

HoRain云--Maven与Gradle工程化实践:从依赖管理到CI/CD

构建工具是Java项目的基石。Maven稳定成熟,Gradle灵活高效。本文对比两者,并讲解多模块、CI/CD集成。一、Maven核心1.1 生命周期cleanvalidate → compile → test → package → verify → install → deploy1.2 依赖范围scope说明compile默认&#xff…

作者头像 李华
网站建设 2026/10/14 10:07:30

南邮数据结构实验一:线性表与多项式运算的完整实现与避坑指南

简介:本资源为南京邮电大学《数据结构》课程实验一的完整实验报告,面向计算机相关专业学生及正在学习线性表与多项式运算的编程初学者。报告围绕顺序表与带表头单链表两种存储结构展开,涵盖初始化、查找、插入、删除、输出、撤销等基本运算&a…

作者头像 李华