argparse 接受一切 [英] argparse accept everything

查看:33
本文介绍了argparse 接受一切的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有没有办法让 argparse.ArgumentParser 在读取未知选项时不引发异常,而是将所有具有值的未知选项放入字典中,而将没有值的选项放入字典中清单?

Is there a way to have an argparse.ArgumentParser not raise an exception upon reading an unknown option, but rather put all the unknown options with values in a dictionary, and those without a value in a list?

例如,假设在解析器中没有为 prog.py 定义参数,我传递了两个参数:

For example, say no arguments were defined in the parser for prog.py, and I pass two arguments:

./prog.py --foo bar --baz

我想要以下内容:

parsed = parser.parse_args()
vals = parsed.unknown_with_vals
novals = parsed.unknown_without_vals

print(vals)
#{'foo' : 'bar'}
print(novals)
#['baz']

这能做到吗?

推荐答案

known, unknown_args = parser.parse_known_args(...)

正如@ben w 在评论中指出的,你如何解析 unknown_args 取决于你,例如,使用以下语法:

As @ben w noted in the comment how do you parse unknown_args is upto you e.g., with the following grammar:

unknown_args = *(with_val / without_val) EOS
with_val = OPT 1*VALUE
without_val = OPT
OPT = <argument that starts with "--">
VALUE = <argument that doesn't start with "--">

或者作为正则表达式:

(O V+ | O)* $

注意:在这种情况下禁止使用孤立值.

Note: orphan values are forbidden in this case.

d = {}
for arg in unknown_args:
    if arg.startswith('--'): # O
        opt = arg
        d[opt] = []
    else: # V
        d[opt].append(arg) #NOTE: produces NameError if an orphan encountered

with_vals = {k: v for k, v in d.items() if v}
without_vals = [k for k, v in d.items() if not v]

这篇关于argparse 接受一切的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆