点击上方“中兴开发者社区”,关注我们
每天读一篇一线开发者原创好文
作者简介
作者王辉,热爱编程的程序员一枚,喜欢研究技术,乐于分享。致力于TDD、Clean Code、DDD等实践的落实实施,是软件设计和软件架构方法的积极学习者和实践者。
诞生之初用来作为配置管理语言的Python,现在已经成为最流行的编程语言之一,尤其是随着AI应用的兴起,变得无处不在。
Python中的getopt,optparse模块都可以进行命令行程序的开发,不过它们已经被废弃,在2.7和3.2版本中引入了argparse模块;这里介绍使用argparser模块,只需要数十行代码,就可以做出漂亮的命令行程序。
1.基本的命令行
看看官方文档里的一个示例:
这几行代码实现的功能为:
如果命令行输入不带--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命令行可以分为以下几组:
在Python中,利用argparse模块也可以很容易做出这样的子命令行程序。
例如,我们要做一个对用户信息进行管理的命令行程序,包括添加、删除、查询显示等几个功能。
我们可以根据功能将其分为三个子命令:add,delete,show。
相应的代码可以这样写:
对上面的代码进行概要的解释:ArgumentParser对象的add_subparsers()方法创建了一个特殊的action实例,对这个实例分别调用add_parser()方法来创建子命令对应的ArgumentParser,再调用这个ArgumentParser实例的add_argument()方法来添加子命令的参数。
一个比较方便的地方在于,可以通过ArgumentParser的set_defaults()方法来设置子命令对应的处理函数。上面的示例中,分别为三个子命令设置了处理函数:add_fn,delete_fn,show_fn。
在命令行程序中执行:
python cmd.py --help,将显示出以下信息:
从帮助信息中可以看到,命令行被组织为三个子命令,分别为add,delete,show。
在命令行中执行:
python cmd.py add --help,可以查看add子命令的帮助信息:
对于add子命令,它有3个参数,分别为用户名、联系地址、电话号码;其中用户名为必选参数,其它两个为可选参数。
在命令行中执行:
python cmd.py add --name 'Eric' --addr 'California,USA' --phone '0076938377'`
添加一个User的处理逻辑将由add_fn()来完成。程序中将得到一个信息为{name='Eric',addr='California,USA', phone='0076938377'}的User。
其它的delete和show子命令与此类似,不再赘述。
3.小结
使用Python的argparse模块,短短的几十行代码就可以搭建起来一个命令行程序的骨架。
argparse模块中最重要的是ArgumentParser对象,它包含了以下几个方法:
add_argument()
add_subparsers()
parse_args()
关于这几个方法的用法,以及参数的详细的说明请参考官方文档。