今天要给大家介绍一个超级好用的Python库 - Typer!它是FastAPI的创建者开发的一个命令行应用框架,可以让我们轻松创建出专业级别的命令行程序。不管是做个小工具还是开发大型CLI应用,用它都特别方便!
为什么选择Typer?Typer的优势真的很明显:
类型提示支持:通过Python的类型注解实现参数验证
自动生成帮助文档:不用手写文档,代码即文档
命令补全功能:支持shell的命令补全
颜色丰富的输出:让命令行界面更美观专业
快速开始让我们从一个最简单的例子开始:
import typerapp = typer.Typer()@app.command()def hello(name: str = "World"): """向用户打招呼""" typer.echo(f"Hello {name}!")if __name__ == "__main__": app.run()
💡小贴士:运行这段代码后,你可以在命令行输入 python script.py --help 看看自动生成的帮助信息哦!
添加命令行参数来看看如何添加更多类型的参数:
import typerfrom typing import Optionalfrom datetime import datetimeapp = typer.Typer()@app.command()def create_user( username: str, # 必选参数 age: int = typer.Option(18, "--age", "-a"), # 可选参数带默认值 is_admin: bool = typer.Option(False, "--admin"), # 布尔标志 birthday: Optional[datetime] = typer.Option(None, formats=["%Y-%m-%d"]) # 日期参数): """创建新用户""" typer.echo(f"创建用户: {username}") typer.echo(f"年龄: {age}") typer.echo(f"管理员: {is_admin}") if birthday: typer.echo(f"生日: {birthday.strftime('%Y-%m-%d')}")if __name__ == "__main__": app.run()
美化输出Typer提供了丰富的输出样式,让我们的CLI应用更专业:
import typerfrom time import sleepdef process_files(): total = 100 with typer.progressbar(range(total)) as progress: for value in progress: # 模拟处理文件 sleep(0.01) # 使用不同颜色输出 typer.secho("处理完成!", fg=typer.colors.GREEN, bold=True) typer.secho("警告信息", fg=typer.colors.YELLOW) typer.secho("错误信息", fg=typer.colors.RED)if __name__ == "__main__": typer.run(process_files)
子命令支持对于复杂的CLI应用,我们可以使用子命令来组织功能:
import typerapp = typer.Typer()db_app = typer.Typer()app.add_typer(db_app, name="db")@db_app.command("init")def db_init(): """初始化数据库""" typer.echo("初始化数据库...")@db_app.command("migrate")def db_migrate(version: str): """数据库迁移""" typer.echo(f"迁移数据库到版本: {version}")@app.command()def info(): """显示系统信息""" typer.echo("系统正常运行中...")if __name__ == "__main__": app.run()
💡小贴士:运行子命令的方式是 python script.py db init 或 python script.py db migrate 1.0