argparse--命令行选项、参数和子命令解析器

argparse模块可以让人轻松编写用户友好的命令行接口。程序定义它需要的参数,然后 argparse 将弄清如何从 sys.argv 解析出那些参数。 argparse 模块还会自动生成帮助和使用手册,并在用户给程序传入无效参数时报出错误信息。

1、创建解析器

使用 argparse 的第一步是创建一个 ArgumentParser 对象:

>>> parser=argparse.ArgumentParser(description="Process some integers")

description-命令行帮助的开始文字,大部分情况下,我们只会用到这个参数

ArgumentParser 对象包含将命令行解析成 Python 数据类型所需的全部信息。

2、添加参数

一个 ArgumentParser 添加程序参数信息是通过调用 add_argument() 方法完成的。

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

name or flags - 一个命名或者一个选项字符串的列表,例如 foo 或 -f, --foo。

action - 当参数在命令行中出现时使用的动作基本类型。

nargs - 命令行参数应当消耗的数目。

const - 被一些 action 和 nargs 选择所需求的常数。

default - 当参数未在命令行中出现时使用的值。

type - 命令行参数应当被转换成的类型。

choices - 可用的参数的容器。

required - 此命令行选项是否可省略 (仅选项可用)。

help - 一个此选项作用的简单描述。

metavar - 在使用方法消息中使用的参数值示例。

dest - 被添加到 parse_args() 所返回对象上的属性名。

1.name or flags

name or flags是的add_argument()的第一个必选参数,是参数的名称,明确add_argument()的参数是可选参数还是位置参数,有两种格式:

1)添加可选参数

parser.add_argument('-f', '--foo')

2)添加位置参数

parser.add_argument('bar')

就是说"-f"或"–foo"格式表示可选参数,"bar"格式表示位置参数

2、action明确参数是被如何处理的

1)action=‘store_const’ 时,保存const中的常量

2)action='store_false’或’store_true’时,分别对应存储True和False值。它们是store_const的特例。

  1. action=‘append’ 时,存储一个列表,并且将每个参数值追加到列表中。在允许多次使用选项时很有用。

4)action='append_const’时,存储一个列表,并将 const 命名参数指定的值追加到列表中。

5)action=‘count’ 时,计算一个关键字参数出现的数目或次数。例如,对于一个增长的详情等级来说有用:

3、一般情况下,一个参数于一个参数操作相,但nargs参数将几个不同的参数跟action关联,支持的值如下:

  1. N(一个整数):命令行中获取的N个参数将会组成一个列表

通常,这些调用指定 ArgumentParser 如何获取命令行字符串并将其转换为对象。这些信息在 parse_args() 调用时被存储和使用。例如:

3、parse_args()方法

语法格式:

parser.parse_args(args=None, namespace=None)

将参数字符串转换为对象,并将其指定为命名空间的属性。返回填充的命名空间。

args-需要解析的字符串列表,默认值取自sys.argv。
namespace-获取属性的对象。默认是一个新的空命名空间对象。

选项值语法
parse_args()方法支持几种解释选项值的方法(如果需要的话)。在最简单的情况下,该选项及其值作为两个单独的参数传递:

>>> import argparse
>>> parser=argparse.ArgumentParser(prog="PROG")
>>> parser.add_argument("-x")
_StoreAction(option_strings=['-x'], dest='x', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)
>>> parser.add_argument("--foo")
_StoreAction(option_strings=['--foo'], dest='foo', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)
>>> parser.parse_args(["-x","X"])
Namespace(foo=None, x='X')
>>> parser.parse_args(["--foo","FOO"])
Namespace(foo='FOO', x=None)

对于长选项(名称大于单个字符的选项),也可以将选项和值作为单命令行参数进行传递,使用=分隔它们:

>>> parser.parse_args(["--foo=FOO"])
Namespace(foo='FOO', x=None)

几个短选项可以连接在一起,仅使用一个“-”前缀,只要仅仅最后一个选项(或一个也没有)需要一个值:

>>> parser=argparse.ArgumentParser(prog="PROG")
>>> parser.add_argument("-x",action="store_true")
_StoreTrueAction(option_strings=['-x'], dest='x', nargs=0, const=True, default=False, type=None, choices=None, help=None, metavar=None)
>>> parser.add_argument("-y",action="store_true")
_StoreTrueAction(option_strings=['-y'], dest='y', nargs=0, const=True, default=False, type=None, choices=None, help=None, metavar=None)
>>> parser.add_argument("-z")
_StoreAction(option_strings=['-z'], dest='z', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)
>>> parser.parse_args(["-xyzZ"])
Namespace(x=True, y=True, z='Z')

你可能感兴趣的:(python)