首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用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()来完成。程序中将得到一个信息为的User。

其它的delete和show子命令与此类似,不再赘述。

3.小结

使用Python的argparse模块,短短的几十行代码就可以搭建起来一个命令行程序的骨架。

argparse模块中最重要的是ArgumentParser对象,它包含了以下几个方法:

add_argument()

add_subparsers()

parse_args()

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

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180326B1722800?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券