Is it possible to use argparse to capture an arbitrary set of optional arguments?

前端 未结 2 720
轮回少年
轮回少年 2020-12-01 09:18

Is it possible to use argparse to capture an arbitrary set of optional arguments?

For example both the following should be accepted as inputs:



        
2条回答
  •  Happy的楠姐
    2020-12-01 10:02

    This is kind of a hackish way, but it works well:

    Check, which arguments are not added and add them

    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument("foo")
    parser.add_argument("-bar", type=int)
    # parser can have any arguments, whatever you want!
    
    parsed, unknown = parser.parse_known_args() # this is an 'internal' method
    # which returns 'parsed', the same as what parse_args() would return
    # and 'unknown', the remainder of that
    # the difference to parse_args() is that it does not exit when it finds redundant arguments
    
    for arg in unknown:
        if arg.startswith(("-", "--")):
            # you can pass any arguments to add_argument
            parser.add_argument(arg, type=, ...)
    
    args = parser.parse_args()
    

    For example:

    python3 arbitrary_parser.py ha -bar 12 -extra1 value1 -extra2 value2
    

    Then the result would be

    args = Namespace(bar=12, foo='ha', extra1='value1' extra2='value2')
    

提交回复
热议问题