Python dependencies between groups using argparse

前端 未结 3 1683
轻奢々
轻奢々 2021-02-09 13:13

I started to learn Python, and now I\'m learning the great benefits of argparse. Using argparse, I have created two groups of arguments: group_li

3条回答
  •  轻奢々
    轻奢々 (楼主)
    2021-02-09 13:48

    You can use a common mutually-exclusive-group as "root" of the two subgroups:

    import argparse
    parser = argparse.ArgumentParser(
            description='this is the description',
            epilog="This is the epilog",
            argument_default=argparse.SUPPRESS  
            )
    
    parser.add_argument('-v', '--verbose', help='verbose', action='store_true', default=False)
    
    root_group = parser.add_mutually_exclusive_group()
    
    group_list = root_group.add_mutually_exclusive_group()
    group_list.add_argument('-m', help='list only modules', action='store_const', dest='list', const='modules', default='all')
    group_list.add_argument('-p', help='list only ports', action='store_const', dest='list', const='ports', default='all')
    group_list.add_argument('--list', help='list only module or ports', choices=['modules','ports'], metavar='', default='all')
    
    group_simulate = root_group.add_mutually_exclusive_group()
    group_simulate.add_argument('-M', help='simulate module down', nargs=1, metavar='module_name', dest='simulate')
    group_simulate.add_argument('-P', help='simulate FC port down', nargs=1, metavar='fc_port_name', dest='simulate')
    group_simulate.add_argument('-I', help='simulate iSCSI port down', nargs=1, metavar='iSCSI_port_name', dest='simulate')
    group_simulate.add_argument('--simulate', help='simulate module or port down', nargs=1, dest='simulate')
    
    args = parser.parse_args()
    
    print args
    

    Result:

    $ python test.py -m -P asfafs
    usage: test.py [-h] [-v] [[-m | -p | --list ]
                    [-M module_name | -P fc_port_name | -I iSCSI_port_name | --simulate SIMULATE]
    test.py: error: argument -P: not allowed with argument -m 
    
    $ python test.py -m -p
    usage: test.py [-h] [-v] [[-m | -p | --list ]
                    [-M module_name | -P fc_port_name | -I iSCSI_port_name | --simulate SIMULATE]
    test.py: error: argument -p: not allowed with argument -m
    

提交回复
热议问题