python笔记 - 用typer开发CLI程序

发布于:2024-06-11 ⋅ 阅读:(38) ⋅ 点赞:(0)

探索 Typer

在开发命令行界面(CLI)应用程序时,Python 提供了许多优秀的库,如 argparseclick 等。然而,Typer 作为一个相对较新的库,以其简洁性和强大的功能脱颖而出。Typer 基于 Click,但利用了 Python 的类型提示(type hints)来简化开发过程。

为什么选择 Typer?

  • 简洁性:通过类型提示和函数签名自动生成命令行参数和选项。
  • 自动化:自动生成帮助信息和文档。
  • 类型安全:利用类型提示提供更好的 IDE 支持和错误检测。

安装 Typer

首先,我们需要安装 Typer。可以使用 pip 来安装:

pip install typer

快速上手

让我们通过一个简单的示例来看看 Typer 是如何工作的。假设我们要创建一个命令行程序来管理一个书籍清单。

import typer

app = typer.Typer()

books = []

@app.command()
def add(title: str, author: str):
    """添加一本书到清单中"""
    books.append({"title": title, "author": author})
    typer.echo(f"已添加书籍: {title} by {author}")

@app.command()
def list():
    """列出所有书籍"""
    if books:
        typer.echo("书籍清单:")
        for book in books:
            typer.echo(f"{book['title']} by {book['author']}")
    else:
        typer.echo("书籍清单为空")

@app.command()
def remove(title: str):
    """从清单中删除一本书"""
    global books
    books = [book for book in books if book["title"] != title]
    typer.echo(f"已删除书籍: {title}")

if __name__ == "__main__":
    app()

代码解释

  1. 导入和初始化

    import typer
    app = typer.Typer()
    
  2. 命令定义
    我们定义了三个命令:addlistremove,分别用于添加、列出和删除书籍。

    • add 命令:

      @app.command()
      def add(title: str, author: str):
          books.append({"title": title, "author": author})
          typer.echo(f"已添加书籍: {title} by {author}")
      

      该命令接收两个参数 titleauthor,并将书籍信息添加到 books 列表中。

    • list 命令:

      @app.command()
      def list():
          if books:
              typer.echo("书籍清单:")
              for book in books:
                  typer.echo(f"{book['title']} by {book['author']}")
          else:
              typer.echo("书籍清单为空")
      

      该命令用于列出所有书籍。

    • remove 命令:

      @app.command()
      def remove(title: str):
          global books
          books = [book for book in books if book["title"] != title]
          typer.echo(f"已删除书籍: {title}")
      

      该命令接收一个参数 title,并从 books 列表中删除对应的书籍。

  3. 运行应用

    if __name__ == "__main__":
        app()
    

    这行代码使得我们的 Typer 应用可以作为脚本直接运行。

运行示例

让我们看看如何运行这些命令:

  • 添加一本书:

    python app.py add "Python 101" "Michael Driscoll"
    

    输出:

    已添加书籍: Python 101 by Michael Driscoll
    
  • 列出所有书籍:

    python app.py list
    

    输出:

    书籍清单:
    Python 101 by Michael Driscoll
    
  • 删除一本书:

    python app.py remove "Python 101"
    

    输出:

    已删除书籍: Python 101
    

结论

Typer 是一个强大且易于使用的库,适合用于快速开发命令行应用。通过利用类型提示,它不仅减少了编码量,还提高了代码的可读性和可维护性。如果你正在寻找一个现代化的 CLI 库,不妨试试 Typer!

希望这篇博客能帮助你更好地理解和使用 Typer。Happy coding!