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

2024-10-01 04:44:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个程序,比如:

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或{}之间需要一个,但不是两者都需要。 如何将此功能添加到程序中??在


Tags: in程序addparsertaskgroupargparseargs
1条回答
网友
1楼 · 发布于 2024-10-01 04:44:45

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

相关问题 更多 >