ArgumentParser.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()
所返回对象上的属性名。
name or flags
add_argument()方法必须知道这是一个选项还是一个位置参数。选项创建如下:
parser.add_argument('-f', '--foo')
位置参数如下创建:
parser.add_argument('bar')
当parse_args被调用,选项会以-前缀识别,剩下当参数会被假定为位置参数:
>>> parser = argparse.ArgumentParser(prog='PROG')
>>> parser.add_argument('-f', '--foo')
>>> parser.add_argument('bar')
>>> parser.parse_args(['BAR'])
Namespace(bar='BAR', foo=None)
>>> parser.parse_args(['BAR', '--foo', 'FOO'])
Namespace(bar='BAR', foo='FOO')
>>> parser.parse_args(['--foo', 'FOO'])
usage: PROG [-h] [-f FOO] bar
PROG: error: the following arguments are required: bar
action
ArgumentParser对象将命令行参数与动作相关联。这些动作可以做与他们相关联的命令行参数的任何事,尽管大多数动作只是简单的向parse_args()返回的对象上添加属性。action命名参数指定了这个命令行参数应当如何处理。
‘store’ - 存储参数的值。默认动作。
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo')
>>> parser.parse_args('--foo 1'.split())
Namespace(foo='1')
‘store_const' - 存储被const命名参数指定的值。’store_const’动作通常用在选项中来指定一些标志。
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='store_const', const=42)
>>> parser.parse_args(['--foo'])
Namespace(foo=42)
'store_true' and 'store_false' - 分别用于存储True和False值的特殊用例。
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='store_const', const=42)
>>> parser.parse_args(['--foo'])
Namespace(foo=42)
'append' - 存储一个列表,并且将每个参数值追加到列表中。(多用于允许多次使用选项)
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='append')
>>> parser.parse_args('--foo 1 --foo 2'.split())
Namespace(foo=['1', '2'])
parser = argparse.ArgumentParser()
parser.add_argument('--foo', action='append')
parser.parse_args('--foo 1 --foo 2'.split())
Namespace(foo=['1', '2'])
#####‘append_const’ - 存储一个列表,并将const命名参数指定的值追加到列表中。(const默认为None,动作一般在多个参数需要在同一列表中存储常数时会用)
parser = argparse.ArgumentParser()
parser.add_argument('--str', dest='types', action='append_const', const=str)
parser.add_argument('--int', dest='types', action='append_const', const=int)
parser.parse_args('--str --int'.split())
Namespace(types=[, ])
#####'count' - 计算一个关键字参数出现的数目或次数。
parser.add_argument('--verbose', '-v', action='count', default=0)
parser.parse_args(['-vvv'])
Namespace(verbose=3)
####nargs
ArgumentParser对象通常关联一个单独的命令行参数到一个单独的被执行的动作。nargs命名参数关联不同数目的命令行参数到单一动作。
##### N。命令行中的N个参数会被聚集到一个列表中。
parser = argparse.ArgumentParser()
parser.add_argument('--foo', nargs=2)
parser.add_argument('bar', nargs=1)
parser.parse_args('c --foo a b'.split())
Namespace(bar=['c'], foo=['a', 'b'])
##### ?。如果当前没有命令行参数,则会产生default值,如果有用-选项字符串时,则会产生const值。
parser = argparse.ArgumentParser()
parser.add_argument('--foo', nargs='?', const='c', default='d')
parser.add_argument('bar', nargs='?', default='d')
parser.parse_args(['XX', '--foo', 'YY'])
Namespace(bar='XX', foo='YY')
parser.parse_args(['XX', '--foo'])
Namespace(bar='XX', foo='c')
parser.parse_args([])
Namespace(bar='d', foo='d')
nargs='?'还可以允许可选的输入输出文件
parser = argparse.ArgumentParser()
parser.add_argument('infile', nargs='?', type=argparse.FileType('r'),
... default=sys.stdin)
parser.add_argument('outfile', nargs='?', type=argparse.FileType('w'),
... default=sys.stdout)
parser.parse_args(['input.txt', 'output.txt'])
Namespace(infile=<_io.TextIOWrapper name='input.txt' encoding='UTF-8'>,
outfile=<_io.TextIOWrapper name='output.txt' encoding='UTF-8'>)
parser.parse_args([])
Namespace(infile=<_io.TextIOWrapper name='' encoding='UTF-8'>,
outfile=<_io.TextIOWrapper name='' encoding='UTF-8'>)
##### '*' 。所有当前命令行参数被聚集到一个列表中,通过nargs=‘*’来实现多个选项。
parser = argparse.ArgumentParser()
parser.add_argument('--foo', nargs='')
parser.add_argument('--bar', nargs='')
parser.add_argument('baz', nargs='*')
parser.parse_args('a b --foo x y --bar 1 2'.split())
Namespace(bar=['1', '2'], baz=['a', 'b'], foo=['x', 'y'])
#####argarse.REMAINDER。所有剩余的命令行参数被聚集到一个列表中。
parser = argparse.ArgumentParser(prog='PROG')
parser.add_argument('--foo')
parser.add_argument('command')
parser.add_argument('args', nargs=argparse.REMAINDER)
print(parser.parse_args('--foo B cmd --arg1 XX ZZ'.split()))
Namespace(args=['--arg1', 'XX', 'ZZ'], command='cmd', foo='B')
####const
[`add_argument()`](https://docs.python.org/zh-cn/3/library/argparse.html#argparse.ArgumentParser.add_argument "argparse.ArgumentParser.add_argument") 的``const`` 参数用于保存不从命令行中读取但被各种 [`ArgumentParser`](https://docs.python.org/zh-cn/3/library/argparse.html#argparse.ArgumentParser "argparse.ArgumentParser") 动作需求的常数值。最常用的两例为:
* 当 [`add_argument()`](https://docs.python.org/zh-cn/3/library/argparse.html#argparse.ArgumentParser.add_argument "argparse.ArgumentParser.add_argument") 通过 `action='store_const'` 或 `action='append_const` 调用时。这些动作将 `const` 值添加到 [`parse_args()`](https://docs.python.org/zh-cn/3/library/argparse.html#argparse.ArgumentParser.parse_args "argparse.ArgumentParser.parse_args") 返回的对象的属性中。在 [action](https://docs.python.org/zh-cn/3/library/argparse.html#action) 的描述中查看案例。
* 当 [`add_argument()`](https://docs.python.org/zh-cn/3/library/argparse.html#argparse.ArgumentParser.add_argument "argparse.ArgumentParser.add_argument") 通过选项(例如 `-f` 或 `--foo`)调用并且 `nargs='?'` 时。这会创建一个可以跟随零个或一个命令行参数的选项。当解析命令行时,如果选项后没有参数,则将用 `const` 代替。在 [nargs](https://docs.python.org/zh-cn/3/library/argparse.html#nargs) 描述中查看案例。
对 `'store_const'` 和 `'append_const'` 动作, `const` 命名参数必须给出。对其他动作,默认为 `None`。
####default
所有选项和一些位置参数可能在命令行中被忽略。[`add_argument()`](https://docs.python.org/zh-cn/3/library/argparse.html#argparse.ArgumentParser.add_argument "argparse.ArgumentParser.add_argument") 的命名参数 `default`,默认值为 `None`,指定了在命令行参数未出现时应当使用的值。对于选项, `default` 值在选项未在命令行中出现时使用:
parser = argparse.ArgumentParser()
parser.add_argument('--foo', default=42)
parser.parse_args(['--foo', '2'])
Namespace(foo='2')
parser.parse_args([])
Namespace(foo=42)
如果 `default` 值是一个字符串,解析器解析此值就像一个命令行参数。特别是,在将属性设置在 [`Namespace`](https://docs.python.org/zh-cn/3/library/argparse.html#argparse.Namespace "argparse.Namespace") 的返回值之前,解析器应用任何提供的 [type](https://docs.python.org/zh-cn/3/library/argparse.html#type) 转换参数。否则解析器使用原值:
parser = argparse.ArgumentParser()
parser.add_argument('--length', default='10', type=int)
parser.add_argument('--width', default=10.5, type=int)
parser.parse_args()
Namespace(length=10, width=10.5)
对于 [nargs](https://docs.python.org/zh-cn/3/library/argparse.html#nargs) 等于 `?` 或 `*` 的位置参数, `default` 值在没有命令行参数出现时使用。
parser = argparse.ArgumentParser()
parser.add_argument('foo', nargs='?', default=42)
parser.parse_args(['a'])
Namespace(foo='a')
parser.parse_args([])
Namespace(foo=42)
提供 default=argparse.SUPPRESS 导致命令行参数未出现时没有属性被添加:
parser = argparse.ArgumentParser()
parser.add_argument('--foo', default=argparse.SUPPRESS)
parser.parse_args([])
Namespace()
parser.parse_args(['--foo', '1'])
Namespace(foo='1')
###了解更多请关注作者微信公众号:
![一技破万法](https://upload-images.jianshu.io/upload_images/15145168-d20ffd7d3f2d89e3.gif?imageMogr2/auto-orient/strip)