我遇到了需要在python中支持多个参数的问题。 例如, 如果-A,-B,-C是选项。 如果-A作为参数传递,它应该包含-i选项。 如果-B作为参数传递,它应该包含-s选项。 如果-A和-B作为参数传递,则它应包含-i和-s选项。
例如,它应该支持以下 1. -A -i 2
-B -s 5
-A -B -i 2 -s 4
-B -A -i 4 -s 5
-A -B -s 5 -i 4
请让我知道如何做到这一点。 我能够实现1)和2)。
但是,如何实施3)4)和5)。
parser1 = argparse.ArgumentParser(prog=sys.argv[0])
parser1.add_argument('-A', action='store_true', required=True, help="index option")
parser1.add_argument('-i', type=int, required=True, help="Index value")
parser2 = argparse.ArgumentParser(prog=sys.argv[0])
parser2.add_argument('-B', action='store_true', required=True,help="source value option")
parser2.add_argument('-s', type=str, required=True, help="source value")
请帮助我摆脱这个问题。
谢谢, 阿维纳什
答案 0 :(得分:0)
我相信你需要回到旧的解析器技术来解决你的问题。
使用optparse
代替argparse
from optparse import OptionParser
usage = "usage: %prog [options] arg"
parser = OptionParser(usage)
parser.add_option("-i", "--index", dest="index",help="Index value")
parser.add_option("-A",action="store_true", dest="A_arg")
[...]
(options, args) = parser.parse_args()
if len(args) != 1:
parser.error("incorrect number of arguments")
if options.A_arg:
print "A flag not given"
[...]
[...]
根据您的情况添加支票
答案 1 :(得分:0)
可能你需要subparsers,见下文。但最好的选择是尝试将选项界面定义为-A 1 -B 3
等。在代码中,您可以指定1 to i and 3 to s
。
#!/usr/bin/env python
import argparse
# create the top-level parser
parser = argparse.ArgumentParser(prog='PROG')
subparsers = parser.add_subparsers(help='sub-command help', dest='subparser_name')
# create the parser for the "A" command
parser_a = subparsers.add_parser('A', help='A help')
parser_a.add_argument('i', type=int, help='i help')
# create the parser for the "B" command
parser_b = subparsers.add_parser('B', help='B help')
parser_b.add_argument('s', type=int, help='s help')
n = parser.parse_args()
if n.subparser_name == 'A':
print n.i
elif n.subparser_name == 'B':
print n.s
else:
pass # control never reaches here
测试:
$ ./argtest.py A 1
1
$ ./argtest.py B 3
3
和
$ ./argtest.py -h
usage: PROG [-h] {A,B} ...
positional arguments:
{A,B} sub-command help
A A help
B B help
optional arguments:
-h, --help show this help message and exit
和
$ ./argtest.py A -h
usage: PROG A [-h] i
positional arguments:
i i help
optional arguments:
-h, --help show this help message and exit
和
$ ./argtest.py B -h
usage: PROG B [-h] s
positional arguments:
s s help
optional arguments:
-h, --help show this help message and exit