诞生之初用来作为配置管理语言的Python,现在已经成为最流行的编程语言之一,尤其是随着AI应用的兴起,变得无处不在。
Python中的getopt,optparse模块都可以进行命令行程序的开发,不过它们已经被废弃,在2.7和3.2版本中引入了argparse模块;这里介绍使用argparser模块,只需要数十行代码,就可以做出漂亮的命令行程序。
1.基本的命令行
看看官方文档里的一个示例:
![](http://file.elecfans.com/web1/M00/4E/51/pIYBAFq68PyAdZVzAABnClgEdT0579.png)
这几行代码实现的功能为:如果命令行输入不带--sum选项,则对输入的多个整数执行max操作;否则,执行sum操作。例如:在命令行中执行:python prog.py 1 2 3 4输出为:4
在命令行中执行:python prog.py 1 2 3 4 --sum输出为:10
上面的代码中,主要的过程分为三个步骤:
调用argparse.ArgumentParser的构造器创建一个ArgumentParser对象。
调用ArgumentParser的add_argument()方法添加命令行的参数,包括可选参数和必选参数。其中以--、 -开头的表示可选参数,其它的表示必须输入的参数。
调用parser.parse_args()方法对传入的sys.argv参数进行解析。
2.实现子命令
有时候,我们可以根据功能将命令行分组成一系列相关的子命令。例如,Git命令行可以分为以下几组:
![](http://file.elecfans.com/web1/M00/4E/51/pIYBAFq68PyAE6wiAADhLPAcMbE714.png)
在Python中,利用argparse模块也可以很容易做出这样的子命令行程序。
例如,我们要做一个对用户信息进行管理的命令行程序,包括添加、删除、查询显示等几个功能。
我们可以根据功能将其分为三个子命令:add,delete,show。
相应的代码可以这样写:
![](http://file.elecfans.com/web1/M00/4E/51/pIYBAFq68P2AEAgbAACXQpfZSHg232.png)
对上面的代码进行概要的解释:ArgumentParser对象的add_subparsers()方法创建了一个特殊的action实例,对这个实例分别调用add_parser()方法来创建子命令对应的ArgumentParser,再调用这个ArgumentParser实例的add_argument()方法来添加子命令的参数。一个比较方便的地方在于,可以通过ArgumentParser的set_defaults()方法来设置子命令对应的处理函数。上面的示例中,分别为三个子命令设置了处理函数:add_fn,delete_fn,show_fn。
在命令行程序中执行:python cmd.py --help,将显示出以下信息:
![](http://file.elecfans.com/web1/M00/4E/51/pIYBAFq68P2AE6hEAABGSoqR9Fc880.png)
从帮助信息中可以看到,命令行被组织为三个子命令,分别为add,delete,show。
在命令行中执行:python cmd.py add --help,可以查看add子命令的帮助信息:
![](http://file.elecfans.com/web1/M00/4E/51/pIYBAFq68P2AYEueAABGTJxGLaI399.png)
对于add子命令,它有3个参数,分别为用户名、联系地址、电话号码;其中用户名为必选参数,其它两个为可选参数。
在命令行中执行:python cmd.py add --name 'Eric' --addr 'California,USA' --phone '0076938377'`
添加一个User的处理逻辑将由add_fn()来完成。程序中将得到一个信息为{name='Eric',addr='California,USA', phone='0076938377'}的User。
![](http://file.elecfans.com/web1/M00/4E/51/pIYBAFq68P2AfNW5AAA50gFZ9dI203.png)
其它的delete和show子命令与此类似,不再赘述。
3.小结
使用Python的argparse模块,短短的几十行代码就可以搭建起来一个命令行程序的骨架。
argparse模块中最重要的是ArgumentParser对象,它包含了以下几个方法:
add_argument()
add_subparsers()
parse_args()
原文标题:干货 | 使用Python轻松写出漂亮的命令行程序
文章出处:【微信号:ZTEdeveloper,微信公众号:中兴开发者社区】欢迎添加关注!文章转载请注明出处。
收藏
人收藏
扫一扫,分享给好友
复制链接分享
评论
发布评论请先 登录
相关推荐
理解python模块的缓存
在一个模块内部重复引用另一个相同模块,实际并不会导入两次,原因是在使用关键字 import 导入模块时,它会先检索 sys.modules 里...
发表于 03-14 16:42 •
663次
阅读
一文理解python模块的缓存
在一个模块内部重复引用另一个相同模块,实际并不会导入两次,原因是在使用关键字 import 导入模块....
python爬虫知识分享 发表于 03-14 16:42 •
101次
阅读
python 包导入的三个冷门知识点
1. 使用 __all__ 控制可被导入的变量使用 from module import * 默认情况下会导入 module 里的所有变量,若你只想从模块中导入其...
发表于 03-14 16:33 •
685次
阅读
关于python包导入的三个冷门知识点
使用 from module import * 默认情况下会导入 module 里的所有变量,若你只....
python爬虫知识分享 发表于 03-14 16:33 •
102次
阅读
基于linkboy+ESP32的创意DIY时钟设计
以linkboy为编程平台,创意DIY时钟,数字式时钟、电子日历、指针式时钟,想要哪种做哪种!lin....
linkboy知多少 发表于 03-14 08:56 •
87次
阅读
详解C语言中的短路现象
C语言一经出现,就以其功能丰富、表达能力强、灵活方便、应用面广等特点迅速在全世界普及和推广。C语....
嵌入式ARM 发表于 03-12 12:23 •
488次
阅读
pip 的超全使用指南
1. 查询软件包查询当前环境安装的所有软件包
[code]$ pip list[/code]查询 pypi 上含有某名字的包
[code]$ pip search pkg[/co...
发表于 03-11 16:03 •
3665次
阅读
一文了解pip的超全使用指南
由于默认情况下,wheel 包的平台是运行 pip download 命令 的平台,所以可能出现平台....
python爬虫知识分享 发表于 03-11 16:03 •
178次
阅读
python常规包与命名空间包
python常规包与命名空间包1. 常规包在 Python 3.3 之前或者说 Python 2 中,一个包想要被导入使用,那么该包内必须要有 __init...
发表于 03-11 15:46 •
2066次
阅读
详解python常规包与命名空间包
python常规包与命名空间包 1. 常规包 在 Python 3.3 之前或者说 Python 2....
python爬虫知识分享 发表于 03-11 15:46 •
189次
阅读
python花式导包的八种方法
python花式导包的八种方法1. 直接 import人尽皆知的方法,直接导入即可
[code]>>> import os
>>> os.getcwd()
'/home/xxx'[/c...
发表于 03-10 16:51 •
763次
阅读
python花式导包的八种方法
python花式导包的八种方法 1. 直接 import 人尽皆知的方法,直接导入即可 import....
python爬虫知识分享 发表于 03-10 16:48 •
169次
阅读
python安装第三方包的八种方法
python安装第三方包的八种方法1. 使用 easy_installeasy_install 这应该是最古老的包安装方式了,目前基本没有人使用了。下面是 ...
发表于 03-10 16:29 •
1036次
阅读
python安装第三方包的八种方法
python安装第三方包的八种方法 1. 使用 easy_install easy_install ....
python爬虫知识分享 发表于 03-10 16:27 •
142次
阅读
2022FTF青少年无人机大赛赛事规则发布!
近日,WRC世界机器人大赛FTF青少年无人机赛项组委会发布了 2022(第五届)FTF青少年无人机大....
创客火无人机 发表于 03-10 15:23 •
200次
阅读
今天咱们用Python整一个超级玛丽游戏 | 附带源码
开发环境Python版本:3.7.8相关模块:requests模块;tqdm模块;pyfreeproxy模块;pyecharts模块;以及一些python自带的模块。...
发表于 03-10 14:26 •
844次
阅读
首届OpenHarmony女性开发者活动 OpenHarmony Ladies不被定义的“AWESOME”
从 1909 年 3 月 8 日,美国芝加哥劳动妇女罢工游行集会以来,国际劳动妇女节已走过了百余....
深开鸿 发表于 03-10 10:34 •
192次
阅读
如何在RK3288上安装Opencv?
如何在RK3288上安装Opencv?
发表于 03-10 06:49 •
276次
阅读
如何才能在RV1109平台上编写基于USB Camera的demo程序?
如何才能在RV1109平台上编写基于USB Camera的demo程序?...
发表于 03-10 06:15 •
89次
阅读
什么是python包、模块和库?
1. 模块以 .py 为后缀的文件,我们称之为 模块,英文名 Module。
模块让你能够有逻辑地组织你的 Python 代码段,把相关的代码...
发表于 03-09 16:48 •
461次
阅读
python包、模块和库是什么
1. 模块 以 .py 为后缀的文件,我们称之为 模块,英文名 Module。 模块让你能够有逻辑地....
python爬虫知识分享 发表于 03-09 16:47 •
201次
阅读
python类的多态和类的property属性
python类的多态 多态,是指在同一类型下的不同形态。 比如下面这段代码 class People....
python爬虫知识分享 发表于 03-09 16:37 •
172次
阅读
AGM MCU IDE安装使用方法
AGM MCU使用自有的IDE编程调试环境,使用起来按步骤安装使用即可。
MCU/FPGA by AGM 发表于 03-09 15:07 •
224次
阅读
用Python学习科学编程
用Python学习科学编程,Python经典教材。
发表于 03-09 15:00 •
26次
阅读
python类的继承详解
python类的继承 类的继承,跟人类繁衍的关系相似。 被继承的类称为基类(也叫做父类),继承而得的....
python爬虫知识分享 发表于 03-08 16:40 •
335次
阅读
python私有变量和私有方法
python私有变量和私有方法 1. 下划线妙用 在 Python 中,下划线可是非常推荐使用的符号....
python爬虫知识分享 发表于 03-08 16:30 •
390次
阅读
LABVIEW编程——表格程序
1.违反了数据流的原则,没有使用控件的端子进行数据传递,在没有任何必要的情况下使用了局部变量 2.初....
发表于 03-08 14:02 •
6次
阅读
python静态方法与类方法
python静态方法与类方法 1. 写法上的差异 类的方法可以分为: 静态方法:有 staticme....
python爬虫知识分享 发表于 03-07 16:56 •
411次
阅读
python类的理解与使用
python类的理解与使用 1. 通俗理解类 类(英文名 class),是具有相同特性(属性)和行为....
python爬虫知识分享 发表于 03-07 16:51 •
392次
阅读
python如何捕获异常和主动抛出异常
python如何主动抛出异常和捕获异常 1. 如何抛出异常? 异常的产生有两种来源: 一种是程序自动....
python爬虫知识分享 发表于 03-04 17:09 •
660次
阅读
Python中有哪些常见的错误和异常
python常见异常类型 在程序运行过程中,总会遇到各种各样的问题和错误。 有些错误是我们编写代码时....
python爬虫知识分享 发表于 03-04 16:58 •
665次
阅读
ESP8266WIFI模块之串口编程(一)
在我学习单片机串口发送与接收数据的时候,对串口的掌握不熟悉,看了不少的学习资料。今天与大家分享使用H....
发表于 03-04 09:52 •
24次
阅读
python变量的作用域
python变量的作用域 1. 作用域 Python的作用域可以分为四种: L (Local) 局部....
python爬虫知识分享 发表于 03-03 16:50 •
400次
阅读
python偏函数和泛型函数详解
python偏函数 假如一个函数定义了多个位置参数,那你每次调用时,都需要把这些个参数一个一个地传递....
python爬虫知识分享 发表于 03-03 16:43 •
417次
阅读
焊接机器人焊接铝材需要哪些操作流程
焊接机器人焊接铝材需要哪些操作流程?铝材在焊接过程中需要进行焊前清理、焊接过程稳定操作以及焊后完善这....
发表于 03-03 09:56 •
465次
阅读
python高阶函数详解
python高阶函数 1. map 函数 map 函数,它接收两个参数,第一个参数是一个函数对象(当....
python爬虫知识分享 发表于 03-02 16:47 •
177次
阅读
python匿名函数的使用
python匿名函数的使用 匿名函数(英语:anonymous function)是指一类无需定义标....
python爬虫知识分享 发表于 03-02 16:42 •
172次
阅读
11个案例讲解python函数参数
函数,在定义的时候,可以有参数的,也可以没有参数。
python爬虫知识分享 发表于 03-01 16:39 •
243次
阅读
详解python普通函数创建与调用
函数是一种仅在调用时运行的代码块。您可以将数据(称为参数)传递到函数中,然后由函数可以把数据作为结果....
python爬虫知识分享 发表于 03-01 16:32 •
246次
阅读
python推导式是什么
python推导式 推导式(英文名:comprehensions),也叫解析式,是Python的一种....
python爬虫知识分享 发表于 02-28 17:13 •
195次
阅读
python while循环详解
python while循环 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处....
python爬虫知识分享 发表于 02-28 16:39 •
171次
阅读
《深入Python3》中文版pdf
《深入Python3》中文版pdf
发表于 02-28 09:45 •
35次
阅读
如何通过程序控制屏幕的显示
上一篇文章中介绍了LED灯、LED数码管和LED点阵屏幕。电子作品中除了数码管和点阵屏,液晶显示屏也....
linkboy知多少 发表于 02-28 09:07 •
312次
阅读
《Dive Into Python》中文翻译版.pdf
《Dive Into Python》中文翻译版.pdf
发表于 02-25 17:22 •
29次
阅读
python for循环的案例说明
python for循环 for 循环可以遍历任何序列的项目,如一个列表或者一个字符串。 它的基本语....
python爬虫知识分享 发表于 02-25 16:27 •
215次
阅读
python判断语句的详细说明
python判断语句:if 1. 简单小例子 如果满足条件 A,则执行代码块 a,否则执行代码块 b....
python爬虫知识分享 发表于 02-25 16:22 •
225次
阅读
python生成器是什么
python生成器 1. 什么是生成器? 生成器(英文名 Generator ),是一个可以像迭代器....
python爬虫知识分享 发表于 02-24 15:53 •
235次
阅读
python迭代器详解
python迭代器 1. 可迭代对象 可以利用 for 循环的对象,都叫可迭代对象。 列表、元组、字....
python爬虫知识分享 发表于 02-24 15:42 •
205次
阅读
初学者学Python必看的几个练手小项目
Python是一种面向对象的解释型编程语言,源代码与解释器CPython遵守GPL协议,Python....
叶枫架构师 发表于 02-23 17:06 •
293次
阅读
4个Python经典项目实战,练手必备!
Python是一种极具可读性和通用性的编程语言。Python这个名字的灵感来自于英国喜剧团体Mont....
叶枫架构师 发表于 02-23 17:06 •
275次
阅读
python集合是什么
python集合 集合(英文名 set),它是一个无序的不重复元素序列。 这里面有两个重点: 无序,....
python爬虫知识分享 发表于 02-23 17:01 •
262次
阅读
python字典是什么
python字典 字典(英文名 dict),它是由一系列的键值(key-value)对组合而成的数据....
python爬虫知识分享 发表于 02-23 16:54 •
239次
阅读
python元组的详细介绍
python元组 元组(英文名 tuple),和列表非常的相似,它也是由一系列元素按顺序进行排列而成....
python爬虫知识分享 发表于 02-22 15:19 •
161次
阅读
python列表的详细介绍
python列表 列表(英文名 list),是由一系列元素按顺序进行排列而成的容器。 这里面有两个重....
python爬虫知识分享 发表于 02-22 15:14 •
159次
阅读
python cookbook(第三版)免费下载
python cookbook(第三版)免费下载。
发表于 02-22 13:57 •
49次
阅读
python运算符是什么
python运算符 0. 什么是运算符? 本章节主要说明Python的运算符。举个简单的例子 4 +....
python爬虫知识分享 发表于 02-21 16:44 •
207次
阅读
python字符串格式化
python字符串格式化 格式化输出,主要有三种方式 使用 % 进行格式化 使用 format 函数....
python爬虫知识分享 发表于 02-21 16:28 •
178次
阅读
python输入与输出详解
python输入与输出 无论是从我们一开始的“hello world”,还是前面章节的里各种例子,基....
python爬虫知识分享 发表于 02-21 16:18 •
226次
阅读
python布尔值是什么
python布尔值 1. 什么是布尔值 但在Python语言中,布尔类型只有两个值 True :表示....
python爬虫知识分享 发表于 02-21 16:10 •
196次
阅读
|