• 基于python的CLI应用程序开发(第一节):简单了解一下Typer


    Typer开发(第一节):简单了解一下Typer

    1. 简介

    Typer 是一个python用于构建 CLI 应用程序的库,简单说就是开发控制台程序,开发简单。要求Python 3.6+, 它唯一的内部依赖是Click

    主要特点是:

    • 编写直观:强大的编辑器支持。处处圆满。更少的调试时间。旨在易于使用和学习。阅读文档的时间更少。
    • 易于使用:最终用户易于使用。所有 shell 的自动帮助和自动完成。
    • 简短:最小化代码重复。每个参数声明的多个功能。更少的错误。
    • 从简单开始:最简单的示例仅向您的应用程序添加 2 行代码:1 次导入,1 次函数调用。
    • 强大的扩展能力:随心所欲地增加复杂性,创建任意复杂的命令树和子命令组,带有选项和参数。
    • Typer CLI工具Typer CLI是一种运行Typer脚本的工具,可在您的终端中为您提供自动补全。

    Typer文档链接:https://typer.tiangolo.com/

    GitHub源码链接:https://github.com/tiangolo/typer

    2. 安装

    typer安装非常简单,只需要在命令行执行pip命令就可以,(对于需要安装虚拟环境的用户请自行解决)

    $ pip install "typer[all]"
    ---> 100%
    Successfully installed typer
    
    • 1
    • 2
    • 3

    在win下安装如下:
    在这里插入图片描述

    注意:使用pip install "typer[all]"命令安装,会自动将typer推荐的扩展库也安装下来,如上图:

    我这个自动安装了Richcommonmark。Rich 是一个 Python 库,用于将文本(带有颜色和样式)写入终端,并用于显示高级内容,例如表格、markdown 和语法高亮代码。CommonMark是一个强定义、高度兼容的 Markdown 规范。

    虽然安装简单,但是我们还是有必要介绍一下安装的过程中都干了什么:

    Typer 在内部使用Click。那是唯一的依赖。因此从原则上来说pip install typer[all]包含Click这个就够了。

    但是它同时会选择安装一些附加的功能,来增强你的Typer 应用:

    1. rich: 格式化Typer显示,自动格式输出正确和错误,使输出具有颜色更加直观。
    2. shellingham:检测当前 Python 可执行文件在哪个 shell 中运行。
      • 有了shellingham你就可以使用--install-completion
      • 如果没有shellingham,您必须传递 shell 的名称才能完成安装,例如--install-completion bash

    注意:当你在安装typer使用的是pip install typer[all] 那么rich和shellingham将会自动安装

    3. 在编辑器中使用Typer

    Typer的设计易于使用且直观,以确保最佳的开发体验。很多编辑器都支持Typer开发的自动补全功能。

    您很少需要返回文档。以下是您的编辑可能会如何帮助您:

    你会完成所有的事情。这是目前其他 CLI 库无法提供的。不再猜测那个变量是什么类型,如果它可以是None等等。

    4. 简单应用1

    下面我们就在编辑器中使用Typer:

    创建一个文件main.py

    # main.py
    import typer
    
    def main(name: str):
        print(f"Hello {name}")
    
    
    if __name__ == "__main__":
        typer.run(main)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    命令行运行python main.py --help:

    命令行运行python main.py XiaoMing:
    在这里插入图片描述

    5. 简单应用2

    上面是最简单的例子。

    现在让我们看一个稍微复杂一点的。带有两个子命令的示例:

    修改文件main.py,创建一个typer.Typer()应用程序,并创建两个带有参数的子命令。

    # main.py
    
    import typer
    
    app = typer.Typer()
    
    @app.command()
    def hello(name: str):
        print(f"Hello {name}")
    
    @app.command()
    def goodbye(name: str, formal: bool = False):
        if formal:
            print(f"Goodbye Ms. {name}. Have a good day.")
        else:
            print(f"Bye {name}!")
    
    
    if __name__ == "__main__":
        app()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 明确创建一个typer.Typer应用程序(前一个typer.run实际上为您隐式创建了一个)。
    • 只要给函数加上@app.command()装饰器,那么这个函数就成为了一个命令。
    • 执行它app()本身,就好像它是一个函数(而不是typer.run)。

    下面测试一下:

    命令行运行python main.py --help:
    在这里插入图片描述

    命令行运行python main.py hello --help:
    在这里插入图片描述

    命令行运行python main.py goodbye --help:
    在这里插入图片描述

    命令行运行python main.py hello XiaoMing:

    命令行运行python main.py goodbye XiaoMing:

    命令行运行python main.py goodbye --formal Camila:
    在这里插入图片描述

    6. 命令参数

    通过上面我们发现,对于命令行参数配置:

    1. 首先在创建命令函数的时候,要声明函数参数的类型,这对于python3.6+来说非常简单。
    2. 将参数类型(CLI 参数CLI 选项)声明为函数参数,就可以实现cmd的参数传递。
    3. 不必学习新的语法、特定库的方法或类等。

    例如:

    对于一个int

    total: int
    
    • 1

    对于bool类型:

    force: bool
    
    • 1

    文件路径枚举(选择)等也类似。后面我们会详细的介绍。

    7.其它

    Typer很强大,它还可以利用一些工具就可以创建子命令组、添加元数据、额外的验证等。这个后面会介绍。

    它具有强大的编辑器支持,包括补全和类型检查。

    当你的用户安装您的软件包或使用Typer CLI时,他们的终端(Bash、Zsh、Fish、PowerShell)将获得TAB自动补全功能;

    有关包含更多功能的更完整示例,后面会有详细的介绍,同时请参阅教程 - 用户指南

    这篇只是一个简单的介绍,后面会持续更新。

  • 相关阅读:
    作用域理解
    SQL语句中过滤条件放在on和where子句中的区别和联系
    Wing Loss 论文阅读笔记
    Go语言学习笔记-A Tour of Go 练习笔记-Errors
    Servlet规范之过滤器Filter
    Nodejs的循环机制
    Centos7单节点快速安装fastdfs
    从精装到智装,下一波浪潮浮现,听听智能家居的大咖们怎么说?
    【Linux】history有问题,看这篇文章就够了!
    案例丨妍丽联合神策上线 CDP,实现五大指标全面提升
  • 原文地址:https://blog.csdn.net/Zhichao_Zhang/article/details/128084765