python argparse having multiple subparsers in one commandline

721 Views Asked by At

I am trying to parse multiple groups of arguments in one command line. both setup1 and setup2 can have identical arguments

python3 setup1 --param1 1 --param2 0 setup2 --param1 0 --param2 -1

I tried to use the subparse as below, but it appears it can be used for only one set of subparameters at a time.

does anyone have any hint on how I could do this?

import argparse
import sys

def do_parse_args(argv):
    parser = argparse.ArgumentParser(description='Multiple subparsers')

    subparsers = parser.add_subparsers(dest='command')
    setup1 = subparsers.add_parser('setup1', help='parameters for setup1')
    setup1.add_argument(
        '--param1',
        action='store'
    )

    setup1.add_argument(
        '--param2',
        action='store'
    )

    setup2 = subparsers.add_parser('setup2', help='parameters for setup2')
    setup2.add_argument(
        '--param1',
        action='store'
    )

    setup2.add_argument(
        '--param2',
        action='store'
    )

    return parser.parse_args(argv)


def main(argv=None):
    args = do_parse_args(argv)
    ret = 0

    print(args)

    return ret


if __name__ == "__main__":
    sys.exit(main())
(venv_cvaas) C:\Work\python_hello>python hello.py setup2 --param1 1 setup1 --param1 1
usage: hello.py [-h] {setup1,setup2} ...
hello.py: error: unrecognized arguments: setup1

(venv_cvaas) C:\Work\python_hello>python hello.py setup1 --param1 1 setup2 --param2 0
usage: hello.py [-h] {setup1,setup2} ...
hello.py: error: unrecognized arguments: setup2
0

There are 0 best solutions below