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
有没有覆盖这个?
答案 0 :(得分:276)
替换
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']
答案 1 :(得分:17)
如果您想使用parser.add_argument('args', nargs=argparse.REMAINDER)
,可以将其余部分放入新参数中。
答案 2 :(得分:7)
实际上argparse仍然“忽略”_unrecognized_args
。只要这些“无法识别”的参数不使用默认前缀,您就不会听到来自解析器的投诉。
使用@ anutbu的配置但使用标准parse.parse_args()
,如果我们使用以下参数执行我们的程序。
$ program --foo BAR a b +cd e
我们将使用此Namespaced数据集合。
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!