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

news2024/11/25 2:23:37

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

文章目录

  • Typer开发(第一节):简单了解一下Typer
    • 1. 简介
    • 2. 安装
    • 3. 在编辑器中使用Typer
    • 4. 简单应用1
    • 5. 简单应用2
    • 6. 命令参数
    • 7.其它

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

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

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

我这个自动安装了Rich和commonmark。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开发的自动补全功能。

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

  • 在Visual Studio 代码中:
    在这里插入图片描述

  • 在PyCharm中:
    在这里插入图片描述

你会完成所有的事情。这是目前其他 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)

命令行运行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()

  • 明确创建一个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

对于bool类型:

force: bool

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

7.其它

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

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/43095.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Idea+maven+spring-cloud项目搭建系列--8整合Zookeeper

本文为 Ideamavenspring-cloud项目搭建系列,maven项目的创建可以参考: https://blog.csdn.net/l123lgx/article/details/121467823 本文使用了nacos 作为微服务的注册与发现,nacos 阿里云服务器的安装可以参考:https://blog.csdn.…

构建用于签名/加密双证书测试体系的可执行命令

注意事项 生成证书请求的填写 范例Subject: C CN, ST Beijing, L Beijing, O MSI, OU msi, CN ca, emailAddress cagmssl.com 前面的步骤存在错误,后面改用脚本进行证书生成,阅读时请跳过前面错误的内容 错误的内容 -> 开始 CA 生成私钥 op…

了解mysql脏页落盘过程

脏页落盘 什么是脏页? 对数据的修改,首先改内存中的缓冲池的页,由于缓冲区的数据跟磁盘中的数据不一致,所以称缓冲区的页为脏页。 脏页如何写入到磁盘? 不是每次更新都触发脏页落盘,而是通过CheckPoint机…

计及调频成本和荷电状态恢复的多储能系统调频功率双层优化【蓄电池经济最优目标下充放电】(基于matlab+yalmip+cplex的蓄电池出力优化)

摘要:针对电网中不同类型储能电站调频成本、剩余调频 能力存在差异、储能电站内部储能单元 SOC 过高或过低 的问题,提出计及调频成本和 SOC 恢复的多储能系统调 频功率双层优化策略,该策略包含调频功率优化层和 SOC 优化层:在调频…

覆盖libc.so.6的惨痛教训

覆盖libc.so.6的惨痛教训背景问题原因解决1、当前session未断开2、OS崩溃重启,所有ssh session断开惨痛教训1、对于上产环境的内核依赖库文件不能随意覆盖、删除。2、 scp 文件覆盖问题总结参考背景 发生时间: 2022年11月28日08:55:20 偷了个懒,在安装t…

Allegro走线自动关闭其它飞线操作指导

Allegro走线自动关闭其它飞线操作指导 Allegro在走线时候有一个自动关闭其它网络飞线的功能,具体操作如下 点击add connect命令 在option里面选择Auto-blank other rats 未勾选的状态 勾选后的状态,其它网络的飞线都被关闭了 This section is describe what the functio…

楼盘vr虚拟样板间,为售楼中心带来财气

房企也进入业绩冲刺期。为了完成销售目标,扩大市场销售面积,各大房企必将加大楼盘推出,降价冲销量已成常态。虚拟样板间采用创意化的营销策略,在激烈的竞争中脱颖而出。 所谓的VR虚拟样板间就是,利用数字化技术把建成或…

使用AWS的API Gateway实现websocket

问题 最近业务上面需要使用到WebSocket长连接来解决某些业务场景。 一图胜千言 注意:这里承担WebSocket服务器的是AWS API Gateway;后面的EC2业务服务,其实都是REST接口服务。 这里主要关注API Gateway和REST业务服务怎么实现API Gateway要…

Mysql事务机制

目录 一:定义 二:事务的特质 三:检测ACID特性 1. 准备工作. 2. 测试原子性和持久性 case1: 模拟原子性的全部失败 case2:模拟原子性的全部成功 case3:检查 持久性。 3. 测试一致性 case1&#xff…

[附源码]计算机毕业设计springboot餐馆点餐管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

马尔可夫链

目录 1.相关概念 2.马尔可夫链的状态概率分布推演及稳态分布 3.马尔可夫链的应用 4.稳态分布性质 1.相关概念 小明同学每日选择早餐的概率转化如下图所示: 并且当日的选择只受前一日的结果以及对应的转移概率影响,与之前的选择无关。———> …

Spring Cloud Alibaba 容器化部署最佳实践 | 本地部署版本 | Seata服务端组件安装

Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。 下载地址 https://github.com/seata/seata/releases Seata安装-修改配…

PyQt5 信号(Signal)与槽(Slot)

PyQt5 信号与槽信号与槽介绍内置信号与槽的使用自定义信号与槽的使用自定义信号和内置槽函数自定义信号和自定义槽函数自定义有参信号使用自定义信号参数装饰器信号与槽信号与槽的断开和连接多线程中信号与槽的使用信号与槽介绍 信号(Signal)与槽(Slot)是Qt中的核心机制&#…

基于Spring Boot的个人博客系统(源码+数据库)

目录 一、系统功能框架图 二、开发技术 三、开发环境 四、页面展示 1.登录页面 2.首页 3.文章详情页面 4.文章评论页面 ​5.后台页面 6.后台文件编辑页面 ​7.后台文章管理列表页面 五、文件组织结构 六、数据库设计 1. 文章详情表t_article 2.文章评论表t_comm…

Elasticsearch:构建地图以按国家或地区比较指标

标如果你不熟悉 Elastic 地图,本教程是一个不错的起点。 它会指导你完成处理位置数据的常见步骤。在完成本教程后,你将学会: 创建具有多个图层和数据源的地图使用符号、颜色和标签来设置数据值的样式在仪表板中嵌入地图在仪表板中跨仪表盘搜索 完成本教…

【Scala专栏】数据类型、变量常量、类和对象

本文内容主要分为3节,依次讲解:Scala的数据类型有哪些? 变量常量如何使用? 类和对象如何理解? 受限于博主的大脑容量,大概是无法做到事无巨细的,不过其实也没必要那么"细"&#xff0c…

Java核心技术卷Ⅰ-第三章Java的基本程序设计结构

重点 1.数据类型 2.运算符 3.字符串 4.控制流程 5.数组 1.数据类型 整型:Java程序必须保证在所有机器上都能得到相同的运行结果,所以各种数据类型的取值范围是固定的;在C/C中,int和long类型的大小与目标平台相关 类型存储需求取值…

基于粒子群算法的线性规划问题求解matlab程序

基于粒子群算法的线性规划问题求解matlab程序 1 基本粒子群算法流程 粒子群算法基于“种群”和“进化”的概念,通过个体间的协作与竞争,实现复杂空间最优解的搜索,其流程如下: (1)初始化粒子群&#xff…

Apache Maven

Apache Maven简介安装Eclipse中安装内置的Maven插件Maven官网下载,直接安装在电脑上Maven安装目录结构bin目录boot目录conf目录lib目录Maven生命周期与命令Maven生命周期clean:清理cleanup:清理所有default:默认site:站…

做数据集增强时,训练一半出现IndexError: tuple index out of range这种错误,不知道怎么改,有神仙赐教一下嘛?

在用YOLOv5做图像训练时,首先做了数据集的增强,但是增强中出现了如下的错误 首先出现这样的警告 (A:/stdy py37-g/agu_img.py:153: DeprecationWarning: An exception was ignored while fetching the attribute __array_interface__ from an object of …