python - argparse 接受一切

标签 python argparse

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

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

./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 取决于您,例如,使用以下语法:

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)* $

注意:在这种情况下,孤立值是被禁止的。

Example

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]

关于python - argparse 接受一切,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9643248/

相关文章:

带连字符的 Python argparse 参数

python - 具有函数的 argparse 子解析器

python - argparse:如何要求一组并非全部互斥且并非全部可选的参数?

python - GAE 中 BlobStore 中的 Blob

java - python vs java 用于存储字典的内存

python - 带有动态参数的 Django 管理命令

Python:将 2 个整数转换为 32 个 float

Python 参数解析 : Leading dash in argument

没有提供参数时python argparse设置行为

python - 更改 Firefox 首选项后,Selenium Firefox Webdriver 不会加载空白页面