干货 | 使用Python轻松写出漂亮的命令行程序

点击上方“中兴开发者社区”,关注我们

每天读一篇一线开发者原创好文

作者简介

作者王辉,热爱编程的程序员一枚,喜欢研究技术,乐于分享。致力于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()

关于这几个方法的用法,以及参数的详细的说明请参考官方文档。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值