Python argparse是否忽略连接的args?
我对Python2.7中的argparse有一个问题。我试图忽略未使用的参数,因为我有一个批处理文件,该文件将参数传递给几个Python脚本,不同的脚本需要提取不同的参数 例如:Python argparse是否忽略连接的args?,python,python-2.7,argparse,Python,Python 2.7,Argparse,我对Python2.7中的argparse有一个问题。我试图忽略未使用的参数,因为我有一个批处理文件,该文件将参数传递给几个Python脚本,不同的脚本需要提取不同的参数 例如: import argparse parser = argparse.ArgumentParser() parser.add_argument('-a', action='store_true') 如果我单独指定每个参数,它可以正常工作: args, unknown = parser.parse_known_args(
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
# []
因此,我似乎只能对已知参数使用串联格式。我想知道是否有一种方法可以使用串联格式,在这种格式中,它可以只提取它知道的参数?我能想到的唯一替代方法就是在所有Python脚本中定义所有参数,但这似乎会污染-h帮助显示?我以前没有遇到过这个问题,但我可以想象为什么会发生这种情况。但我必须检查代码以确定细节 “-ab”被传递给名为
consume\u optional
的嵌套函数。这有特殊的代码来识别和吐出这些连接的参数。它识别'-a'。因为它不接受任何参数,所以它假定'b'表示'-b'。如果未定义'-b',则会发出此错误消息。它不会将其扔进附加列表中
一个独立的'-b'字符串将被放入extras
,但这发生在consume\u optionals
函数的开头。您可能认为'-ab'和'-a-b'是同一件事,但解析路径不同,导致不同的错误
请尝试对'-b'使用help=argparse.SUPPRESS
。这将减少帮助显示的“污染”。您可能仍然需要使用自定义的“用法”
“-ab”在定义了“-b”但没有定义“-a”的解析器中可能仍然存在问题。整个字符串将放入“附加”列表。这就是它的工作原理。如果你看一下这个方法:它叫做parse_KNOWN_args()
。但是参数-ab真的只是两个独立参数a和b的缩写版本,其中a是已知的,b不是?如果我使用-a-b,那么即使-b未知,它也能工作。我只想选择使用-ab,因为这种输入方式对许多管理员来说更为熟悉。对于我的解决方案,我将遵循这一点,为所有可能的参数添加条目,然后对不使用它们的脚本使用help=argparse.SUPPRESS。效果很好。