Python 命令行工具
Abstract
在 Python 中,构建命令行工具(CLI)主要有三种常见方案:argparse、Click 和 Typer。
argparse是标准库,功能稳定但写法较为传统Click提供了更结构化的方式,适合中大型 CLI 项目Typer基于类型注解,语法简洁,是现代推荐方案
三者的核心区别在于:开发体验、代码简洁度以及适用场景。本文对它们进行简单对比与总结。
argparse(标准库)
argparse 是 Python 标准库中用于解析命令行参数的模块,无需额外安装。 它支持位置参数、可选参数、类型转换以及自动生成帮助信息,适合编写简单脚本或对依赖较敏感的命令行工具。
特点:
- Python 内置,无需额外依赖
- 支持参数解析与类型校验
- 可自动生成
-h/--help帮助信息 - 写法相对传统,代码通常比 Typer 更繁琐
import argparse
# 创建解析器对象
parser = argparse.ArgumentParser(description='一个简单的示例程序')
# 添加参数
parser.add_argument('--name', type=str, help='输入你的名字')
parser.add_argument('--age', type=int, help='输入你的年龄')
# 解析参数
args = parser.parse_args()
# 使用参数
print(f'你好, {args.name}!')
print(f'你的年龄是: {args.age}')
Click
Click 是一个用于构建命令行工具的第三方库,提供了比 argparse 更简洁和结构化的写法。 它通过装饰器定义命令和参数,支持子命令、参数类型校验以及自动生成帮助信息,适合开发中大型 CLI 工具。
特点:
- 基于装饰器,代码结构清晰
- 支持子命令(类似 git)
- 自动生成命令行帮助信息
- 功能强大,生态成熟
import click
@click.command()
@click.option("--name", help="User name")
def hello(name):
print(f"Hello, {name}")
if __name__ == "__main__":
hello()
Typer
Typer 是一个基于类型注解(type hints)的现代 Python CLI 框架,构建在 Click 之上。 它通过函数签名自动解析参数,并生成友好的帮助信息,使代码更加简洁直观,适合快速开发命令行工具。
特点:
- 基于类型注解,参数定义简洁
- 自动生成清晰的帮助文档
- 支持自动补全(shell autocomplete)
- 底层基于 Click,功能强大
import typer
app = typer.Typer()
@app.command()
def uppercase(
text: str = typer.Argument(..., help="要转换的输入文本"),
repeat: int = typer.Option(1, "--repeat", "-r", help="重复输出次数"),
silent: bool = typer.Option(False, "--silent", "-s", help="静默模式,不显示输出")
):
"""将输入文本转换为大写。"""
result = text.upper()
if not silent:
for _ in range(repeat):
typer.echo(result)
@app.command()
def lowercase(text: str):
"""将输入文本转换为小写。
Args:
text: 要转换的文本字符串
"""
typer.echo(text.lower())
if __name__ == "__main__":
app()
$ python test.py --help
Usage: test.py [OPTIONS] COMMAND [ARGS]...
╭─ Options ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --install-completion Install completion for the current shell. │
│ --show-completion Show completion for the current shell, to copy it or customize the installation. │
│ --help Show this message and exit. │
╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ uppercase 将输入文本转换为大写。 │
│ lowercase 将输入文本转换为小写。 │
╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯