下面是我使用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]]
任何输入都会有所帮助。
谢谢!
答案 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