我在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帮助显示?
答案 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'列表中。