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!