如何使用互斥组在Python中使用argparser进行验证

时间:2020-06-23 03:52:37

标签: python argparse

下面是我使用argparser在python中实现的命令示例

usage: feeder [-h] [--feed FILE] [--flag] [--refresh]
                        [--host FILE | --xmlfile]
                        [--exclude exclude_list| --include include_list]

这是我的python代码:

    parser = argparse.ArgumentParser()
    parser.add_argument('--feed', required=False, dest = 'feed_file')
    parser.add_argument('--flag', required=False, dest = 'flag', action='store_true')
    parser.add_argument('--refresh', required=False, dest = 'refresh', action='store_true')

    group1 = parser.add_mutually_exclusive_group()
    group1.add_argument('--host', dest = 'host_file' )
    group1.add_argument('--xmlfile', dest = 'xmlfile', action='store_true')

    group2 = parser.add_mutually_exclusive_group()
    group2.add_argument('--exclude', dest = 'exclude_files', required=False)
    group2.add_argument('--include', dest = 'include_files', required=False)

    args = parser.parse_args()

我有两个组,如上面列出的第1组和第2组。现在,我正在寻找另外一个组,该组允许我从(提要,标志,刷新,主机,xmlfile)或(排除,包含)中选择参数,但不能同时选择两者。

这样,供料器就会变得像

usage: feeder [-h] [[--feed FILE] [--flag] [--refresh]   [--host FILE | --xmlfile]]
                   [[--exclude exclude_list| --include include_list]]

任何输入都会有所帮助。

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为您需要使用子解析器为两个互斥的组中的每一个添加不同的命令:

import argparse

# create the top-level parser
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(help='sub-command help')

# create the parser for the "first" command
parser_1 = subparsers.add_parser('first', help='first help')
parser_1.add_argument('--feed', required=False, dest = 'feed_file')
parser_1.add_argument('--flag', required=False, dest = 'flag', action='store_true')
parser_1.add_argument('--refresh', required=False, dest = 'refresh', action='store_true')

group1 = parser_1.add_mutually_exclusive_group()
group1.add_argument('--host', dest = 'host_file' )
group1.add_argument('--xmlfile', dest = 'xmlfile', action='store_true')

# create the parser for the "second" command
parser_2 = subparsers.add_parser('second', help='second help')

group2 = parser_2.add_mutually_exclusive_group()
group2.add_argument('--exclude', dest = 'exclude_files', required=False)
group2.add_argument('--include', dest = 'include_files', required=False)

args = parser.parse_args()

那么您将得到:

$ python3 feeder.py --help
usage: feeder.py [-h] {first,second} ...

positional arguments:
  {first,second}  sub-command help
    first         first help
    second        second help

optional arguments:
  -h, --help      show this help message and exit

对于第一个命令/组:

$ python3 feeder.py first --help
usage: feeder.py first [-h] [--feed FEED_FILE] [--flag] [--refresh]
                       [--host HOST_FILE | --xmlfile]

optional arguments:
  -h, --help        show this help message and exit
  --feed FEED_FILE
  --flag
  --refresh
  --host HOST_FILE
  --xmlfile

第二个命令/组:

$ python3 feeder.py second --help
usage: feeder.py second [-h]
                        [--exclude EXCLUDE_FILES | --include INCLUDE_FILES]

optional arguments:
  -h, --help            show this help message and exit
  --exclude EXCLUDE_FILES
  --include INCLUDE_FILES