Python argparse忽略无法识别的参数

Optparse,旧版本只是忽略了所有无法识别的参数并继续进行。 在大多数情况下,这是不理想的,并在变化的argparse。 但有几种情况下,你想忽略任何无法识别的参数,并parsing你指定的。

例如:

parser = argparse.ArgumentParser() parser.add_argument('--foo', dest="foo") parser.parse_args() $python myscript.py --foo 1 --bar 2 error: unrecognized arguments: --bar 

有反正覆盖这个?

更换

 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'] 

如果你想使用它们,你可以使用parser.add_argument('args', nargs=argparse.REMAINDER)将其余的部分放到一个新的参数中。

实际上,argparse仍然“忽略” _unrecognized_args 。 只要这些“无法识别”的参数不使用默认的前缀,您将听不到parsing器的投诉。

使用@ anutbu的configuration,但使用标准的parse.parse_args() ,如果我们要用下面的参数执行我们的程序。

 $ program --foo BAR ab +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!