add_mutually_exclusive_group
không làm cho cả một nhóm loại trừ lẫn nhau. Nó làm cho các tùy chọn trong nhóm loại trừ lẫn nhau.
Những gì bạn đang tìm kiếm là các lệnh con . Thay vì prog [-a xxxx | [-b yyy -c zzz]], bạn có:
prog
command 1
-a: ...
command 2
-b: ...
-c: ...
Để gọi với tập đối số đầu tiên:
prog command_1 -a xxxx
Để gọi với tập đối số thứ hai:
prog command_2 -b yyyy -c zzzz
Bạn cũng có thể đặt các đối số lệnh phụ là vị trí.
prog command_1 xxxx
Kiểu như git hoặc svn:
git commit -am
git merge develop
Ví dụ làm việc
parser = argparse.ArgumentParser(prog='PROG')
parser.add_argument('--foo', action='store_true', help='help for foo arg.')
subparsers = parser.add_subparsers(help='help for subcommand')
parser_a = subparsers.add_parser('command_1', help='command_1 help')
parser_a.add_argument('a', type=str, help='help for bar, positional')
parser_b = subparsers.add_parser('command_2', help='help for command_2')
parser_b.add_argument('-b', type=str, help='help for b')
parser_b.add_argument('-c', type=str, action='store', default='', help='test')
Kiểm tra nó
>>> parser.print_help()
usage: PROG [-h] [--foo] {command_1,command_2} ...
positional arguments:
{command_1,command_2}
help for subcommand
command_1 command_1 help
command_2 help for command_2
optional arguments:
-h, --help show this help message and exit
--foo help for foo arg.
>>>
>>> parser.parse_args(['command_1', 'working'])
Namespace(a='working', foo=False)
>>> parser.parse_args(['command_1', 'wellness', '-b x'])
usage: PROG [-h] [--foo] {command_1,command_2} ...
PROG: error: unrecognized arguments: -b x
Chúc may mắn.