|
|
|
|
移动端

3.3.1 ArgumentParse解析器

《Python Linux系统管理与自动化运维》第3章打造命令行工具,本章介绍了如何使用Python语言解析ini格式的配置文件以及如何使用Python语言解析命令行参数,紧接着,本章介绍了Python标准库中的logging库,在本章最后,我们介绍了如何使用开源项目打造功能更加强大的命令行工具。本节为大家介绍ArgumentParse解析器。

作者:赖明星来源:机械工业出版社|2017-09-28 17:14

技术沙龙 | 4月21日多位区块链专家进行区块链技术应用场景解读!


3.3 使用argparse解析命令行参数

对于命令行工具来说,命令行参数比配置文件使用更加广泛。在Python中, argparse是标准库中用来解析命令行参数的模块,用来替代已经过时的optparse 模块。argparse能够根据程序中的定义从sys.argv中解析出这些参数,并自动生成帮助和使用信息。

3.3.1 ArgumentParse解析器

使用argparse解析命令行参数时,首先需要创建一个解析器,创建方式如下所示:

  1. import argparse  
  2. parser = argparse.ArgumentParser() 

ArgumentParser类的初始化函数有多个参数,其中比较常用的是description。description是程序的描述信息,即帮助信息前的文字。

为应用程序添加参数选项需要用ArgumentParser对象的add_argument方法,该方法原型如下:

  1. add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest]) 

各个参数的含义如下:

name/flags:参数的名字;

action:遇到参数时的动作,默认值是store;

nargs:参数的个数,可以是具体的数字,或者是“+”号与“*”号。其中,“*”号表示0或多个参数,“+”号表示1或多个参数;

const action和nargs:需要的常量值;

default:不指定参数时的默认值;

type:参数的类型;

choices:参数允许的值;

required:可选参数是否可以省略;

help:参数的帮助信息;

metavar:在usage说明中的参数名称;

dest:解析后的参数名称。

解析参数需要用ArgumentParser对象的parse_args方法,该方法返回一个Namespace对象。获取对象以后,参数值通过属性的方式进行访问。

例如,在下面的例子中,我们首先导入argparse库,然后在_argparse函数中创建一个ArgumentParser解析器,并通过add_argument函数添加选项。选项添加完成以后,调用parse_args函数解析命令行参数。在main函数中,我们可以通过parser.server获取--host选项的值,通过parse.boolean_switch获取-t选项的值。

  1. from __future__ import print_function  
  2. import argparse  
  3.  
  4. def _argparse():  
  5.     parser = argparse.ArgumentParser(description="This is description")  
  6.     parser.add_argument('--host', action='store',  
  7.             dest='server',default="localhost"help='connect to host')  
  8.     parser.add_argument('-t', action='store_true',  
  9.             default=Falsedest='boolean_switch'help='Set a switch to true')  
  10.     return parser.parse_args()  
  11.  
  12. def main():  
  13.     parser = _argparse()  
  14.     print(parser)  
  15.     print('host =', parser.server)  
  16.     print('boolean_switch=', parser.boolean_switch)  
  17.  
  18. if __name__ == '__main__':  
  19.     main() 

由于我们为所有的选项都提供了默认值,因此,即使不传递任何参数也不会出错。如下所示:

  1. $ python test_argparse.py   
  2. Namespace(boolean_switch=Falseserver='localhost')  
  3. host = localhost 
  4. boolean_switchFalse 
  5.  
  6. $ python test_argparse.py --host=127.0.0.1 -t  
  7. Namespace(boolean_switch=Trueserver='127.0.0.1')  
  8. host = 127.0.0.1  
  9. boolean_switchTrue 

使用argparse进行参数解析还有一个好处是,它能够根据我们的选项定义自动生成帮助信息。例如,对于前面的例子,我们没有添加帮助信息,但是可以直接通过--help选项获取帮助信息。如下所示:

  1. $ python test_argparse.py --help  
  2. usage: test_argparse.py [-h] [--host SERVER] [-t]  
  3.  
  4. This is description  
  5.  
  6. optional arguments:  
  7.     -h, --help     show this help message and exit  
  8.     --host SERVER  connect to host  
  9.     -t             Set a switch to true 

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

网管员必读——网络安全(第2版)

本书是在《网管员必读—网络安全》第1版的基础上修改而成的。新版在保留第1版实用内容的基础上增加了大量新的实用内容,同时删除了一些过时...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊