我正在写一个类似的程序:
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
之间,而不是两者。
如何将此功能添加到我的程序中?
答案 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