Python argparse忽略连接的args?

时间:2015-12-01 01:49:32

标签: python python-2.7 argparse

我在Python 2.7中有关于argparse的问题。我试图忽略那些没有被使用的参数,因为我有一个批处理文件,它将参数传递给几个Python脚本,不同的脚本需要提取不同的参数。

例如:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-a', action='store_true')

如果我自己指定每个参数,它可以正常工作:

args, unknown = parser.parse_known_args(['-a',' -b'])
print args
# Namespace(a=True)
print unknown
# [' -b']

但是如果我以连续格式指定它们:

args, unknown = parser.parse_known_args(['-ab'])

我明白了:

: error: argument -a: ignored explicit argument 'b'

但是,如果我将此行添加到上面的代码中:

parser.add_argument('-b', action='store_true')

然后这个有效:

args, unknown = parser.parse_known_args(['-ab'])
print args
# Namespace(a=True, b=True)
print unknown
# []

所以看来我只能使用已知参数的连接格式。我想知道是否有一种方法可以使用连接格式,它可以拉出它知道的args?我能想到的唯一选择就是在所有Python脚本中定义所有参数,但是这似乎会污染-h帮助显示?

1 个答案:

答案 0 :(得分:2)

之前我没有遇到过这个问题,但我可以想象为什么会这样。但我必须检查代码以确保细节。

' - ab'被传递给名为consume_optional的嵌套函数。这有特殊的代码来识别和吐出这些连接的args。它识别'-a'。由于它不带任何参数,因此假定'b'表示'-b'。如果未定义“-b”,则会发出此错误消息。它不会将其放入extras列表。

单独的'-b'字符串将放入extras,但这发生在此consume_optionals函数的开头。您可能会认为'-ab'和'-a -b'是相同的,但解析路径不同,导致不同的错误。

尝试使用help=argparse.SUPPRESS代替'-b'。这应该减少帮助显示的“污染”。您可能仍需要使用自定义“使用”。

' - ab'在解析器中仍然可能存在问题,其中定义了`-b',但'-a'不是。整个字符串将放在'extras'列表中。