Python argparse 忽略连接的参数?
Python argparse to ignore concatenated args?
我对 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
# []
看来我只能使用已知参数的串联格式。我想知道是否有一种方法可以使用连接格式,它可以只提取它知道的参数?我能想到的唯一选择就是在所有 Python 脚本中定义所有参数,但那样似乎会污染 -h 帮助显示?
我以前没有遇到过这个问题,但我可以想象为什么会这样。但我必须检查代码以确定细节。
'-ab' 被传递给一个名为 consume_optional
的嵌套函数。这有特殊的代码来识别和吐出这些串联的参数。它识别“-a”。由于它不接受任何参数,因此它假定 'b' 表示“-b”。如果未定义“-b”,则会发出此错误消息。它不会将其放入 extras
列表。
一个独立的 '-b' 字符串将被放入 extras
,但它出现在这个 consume_optionals
函数的开头。你可能会认为'-ab'和'-a -b'是同一个东西,只是解析路径不同,导致的错误也不同。
尝试help=argparse.SUPPRESS
'-b'。那应该减少帮助显示的 'pollution'。您可能仍然需要使用自定义 'usage'。
'-ab' 在定义了“-b”但没有定义“-a”的解析器中仍然存在问题。整个字符串将放入 'extras' 列表。
我对 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
# []
看来我只能使用已知参数的串联格式。我想知道是否有一种方法可以使用连接格式,它可以只提取它知道的参数?我能想到的唯一选择就是在所有 Python 脚本中定义所有参数,但那样似乎会污染 -h 帮助显示?
我以前没有遇到过这个问题,但我可以想象为什么会这样。但我必须检查代码以确定细节。
'-ab' 被传递给一个名为 consume_optional
的嵌套函数。这有特殊的代码来识别和吐出这些串联的参数。它识别“-a”。由于它不接受任何参数,因此它假定 'b' 表示“-b”。如果未定义“-b”,则会发出此错误消息。它不会将其放入 extras
列表。
一个独立的 '-b' 字符串将被放入 extras
,但它出现在这个 consume_optionals
函数的开头。你可能会认为'-ab'和'-a -b'是同一个东西,只是解析路径不同,导致的错误也不同。
尝试help=argparse.SUPPRESS
'-b'。那应该减少帮助显示的 'pollution'。您可能仍然需要使用自定义 'usage'。
'-ab' 在定义了“-b”但没有定义“-a”的解析器中仍然存在问题。整个字符串将放入 'extras' 列表。