Python:如何使用argparse在subparser中拥有互斥组?

时间:2013-03-26 18:15:02

标签: python python-2.7 argparse mutual-exclusion

我正在写一个类似的程序:

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)

正如我在运行task1时所解释的那样,需要--in--out之间,而不是两者。 如何将此功能添加到我的程序中?

1 个答案:

答案 0 :(得分:3)

Subparsers支持普通解析器支持的所有方法,包括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