您的位置:首页 > 编程语言 > Python开发

Python-Argparse

2016-03-17 11:48 399 查看
一:Argparse简介

具体介绍可以参考:Argparse简易教程http://blog.ixxoo.me/argparse.html

argparse模块作为optparse的一个替代被添加到Python2.7。argparse的实现支持一些不易于添加到optparse以及要求向后不兼容API变化的特性,因此以一个新模块添加到标准库。

与optparse相比较:argparse的API类似于optparse,甚至在很多情况下通过更新所使用的类名和方法名,使用argparse作为一个简单的替代。然而,有些地方在添加新特性时不能保持直接兼容性。

你必须视情况决定是否升级已有的程序。如果你已编写了额外的代码以弥补optparse的局限,也许你想升级程序以减少你需要维护的代码量。若argparse在所有部署平台上都可用,那么新的程序应尽可能使用argparse。

二:Argparse使用流程

1.设置一个解析器

使用argparse的第一步就是创建一个解析器对象,并告诉它将会有些什么参数。那么当你的程序运行时,该解析器就可以用于处理命令行参数。

解析器类是ArgumentParser。构造方法接收几个参数来设置用于程序帮助文本的描述信息以及其他全局的行为或设置。

import argparse

parser=argparse.ArgumentParser(description=’This is a PyMOTW sample program’)

2.定义参数

参数可以触发不同的动作,动作由add_argument()方法的action参数指定。 支持的动作包括保存参数(逐个地,或者作为列表的一部分),当解析到某参数时保存一个常量值(包括对布尔开关真/假值的特殊处理),统计某个参数出现的次数,以及调用一个回调函数。

默认的动作是保存参数值。在这种情况下,如果提供一个类型,那么在存储之前会先把该参数值转换成该类型。如果提供dest参数,参数值就保存为命令行参数解析时返回的命名空间对象中名为该dest参数值的一个属性。

3.解析一个命令行

定义了所有参数之后,你就可以给parse_args()传递一组参数字符串来解析命令行。默认情况下,参数是从sys.argv[1:]中获取,但你也可以传递自己的参数列表。选项是使用GNU/POSIX语法来处理的,所以在序列中选项和参数值可以混合。

三:Argparse参数类型

简单的来说,命令行参数主要包含两种类型,一是参数值,另一个是选项参数;

参数值:如果程序存在参数值则运行的时候必须提供参数值,参数值是程序与命令行交互主要手段;

选项参数:这个参数事实上是可选的,不指定它也不会出错。如果不指定选项参数,对应的变量就被设置为None,并且可以简写,只要是用来控制程序的部分表现和特性;

eg:rm dir -rf 中dir为参数值代表程序需要操作的对象,-rf为选项参数代表程序在操作对象的时候的一些特别注意事项;

四:参数动作

argparse内置6种动作可以在解析到一个参数时进行触发:

store保存参数值,可能会先将参数值转换成另一个数据类型。若没有显式指定动作,则默认为该动作。

store_const保存一个被定义为参数规格一部分的值,而不是一个来自参数解析而来的值。这通常用于实现非布尔值的命令行标记。

store_ture/store_false保存相应的布尔值。这两个动作被用于实现布尔开关。

append将值保存到一个列表中。若参数重复出现,则保存多个值。

append_const将一个定义在参数规格中的值保存到一个列表中。

version打印关于程序的版本信息,然后退出

五:例子

importargparse

parser = argparse.ArgumentParser()

parser.add_argument("square",type=int,

help="display a square of a given number")

parser.add_argument("-v","--verbosity",action="store_true",

help="increase output verbosity")

args = parser.parse_args()

answer = args.square **2

ifargs.verbosity:

print"the square of {} equals {}".format(args.square,answer)

else:

printanswer
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python