Python的argparse忽略无法识别的参数(Python argparse ignore un

2019-06-18 12:08发布

Optparse,老版会忽略所有无法识别的参数和进行。 在大多数情况下,这是不理想的,并在argparse改变。 但也有要忽略任何无法识别的论据和分析您所指定的那些少数情况下。

例如:

parser = argparse.ArgumentParser()
parser.add_argument('--foo', dest="foo")
parser.parse_args()

$python myscript.py --foo 1 --bar 2
error: unrecognized arguments: --bar

反正是有覆盖呢?

Answer 1:

更换

args = parser.parse_args()

args, unknown = parser.parse_known_args()

例如,

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo')
args, unknown = parser.parse_known_args(['--foo', 'BAR', 'spam'])
print(args)
# Namespace(foo='BAR')
print(unknown)
# ['spam']


Answer 2:

你可以把剩余部分与一个新的说法parser.add_argument('args', nargs=argparse.REMAINDER)如果你想使用它们。



Answer 3:

其实argparse确实还“忽略” _unrecognized_args 。 只要这些“无法识别”的论点不使用默认前缀 ,你会听到没有从解析器投诉。

使用@ anutbu的配置,但与标准parse.parse_args()如果我们用下面的参数来执行我们的计划。

$ program --foo BAR a b +cd e

我们将这个命名空间的数据收集工作。

Namespace(_unrecognized_args=['a', 'b', '+cd', 'e'], foo='BAR')

如果我们想默认前缀-忽略我们可以改变ArgumentParser和决定,我们将使用+为我们的“认可”参数,而不是。

parser = argparse.ArgumentParser(prefix_chars='+')
parser.add_argument('+cd')

同样的命令将产生

Namespace(_unrecognized_args=['--foo', 'BAR', 'a', 'b'], cd='e')

把在你的下怀它=)

的nJoy!



文章来源: Python argparse ignore unrecognised arguments