Typer 命令行工具使用示例
示例1:简单问候程序
代码
python
import typer
app = typer.Typer()
@app.command()
def greet(name: str):
"""简单的问候命令"""
typer.echo(f"Hello {name}!")
if __name__ == "__main__":
app()
使用方式
bash
# 输入
python simple_greet.py John
# 输出
Hello John!
示例2:带选项的问候程序
代码
python
import typer
app = 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()
使用方式
bash
# 输入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:复杂问候程序(用户提供的示例)
代码
python
import typer
from typing import Optional
app = 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()
使用方式
bash
# 输入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.
总结
- 位置参数 :直接声明,如
name: str
- 可选参数 :使用
Optional
和typer.Argument
,如age: Optional[int] = typer.Argument(None)
- 选项参数 :使用
typer.Option
,可以设置短选项和长选项 - 帮助文档 :自动生成,可通过
--help
查看 - 参数顺序:位置参数必须按顺序提供,选项参数可以任意顺序
Typer 让创建功能丰富的命令行工具变得简单直观,只需使用 Python 类型提示即可自动处理参数解析和验证。