繁体   English   中英

Python argparse 忽略连接的 args?

[英]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 for '-b'。 这应该会减少帮助显示的“污染”。 您可能仍然需要使用自定义的“用法”。

'-ab'在定义了'-b'的解析器中仍然可能有问题,但'-a'不是。 整个字符串将放入“附加”列表中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM