Python: how to have mutually exclusive groups in subparser using argparse?
Question: I am writing a program like:

    
    
    import argparse
    
    def task1(args):
        print "running task 1"
    
    def task2(args):
        print "running task 2"
    
    
    if __name__=="__main__":
        parser=argparse.ArgumentParser(description="How can I have mutually exclusive groups in subparsers?")
        subparsers=parser.add_subparsers()
        t1sub=subparsers.add_parser("task1")
        #....
        t1sub.set_defaults(func=task1)
        # here I would like to have a mutually exclusive group
        # when task 1 of the option one between --in and --out is required, but one excludes the other
        # apparently a subparser has no add_group() not add_mutually_exclusive_group(), though
        t2sub=subparsers.add_parser("task2")
        #....
        t1sub.set_defaults(func=task2)
    
        args = parser.parse_args()
    
        args.func(args)
    

As explained when I run task1 one between `--in` or `--out` is required but
not both. How can I add this functionality to my program??


Answer: Subparsers support all the methods a normal parser supports, including
`add_mutually_exclusive_group()`:

    
    
    >>> megroup = t1sub.add_mutually_exclusive_group()
    >>> megroup.add_argument('--in', action='store_true')
    _StoreTrueAction(option_strings=['--in'], dest='in', nargs=0, const=True, default=False, type=None, choices=None, help=None, metavar=None)
    >>> megroup.add_argument('--out', action='store_true')
    _StoreTrueAction(option_strings=['--out'], dest='out', nargs=0, const=True, default=False, type=None, choices=None, help=None, metavar=None)
    >>> parser.parse_args(['task1', '--in'])
    Namespace(func=<function task1 at 0x10a0d9050>, in=True, out=False)
    >>> t1sub.print_help()
    usage:  task1 [-h] [--in | --out]
    
    optional arguments:
      -h, --help  show this help message and exit
      --in
      --out
    >>> parser.print_help()
    usage: [-h] {task1,task2} ...
    
    How can I have mutually exclusive groups in subparsers?
    
    positional arguments:
      {task1,task2}
    
    optional arguments:
      -h, --help     show this help message and exit
    

