查询python中的多个参数

时间:2015-10-26 05:36:28

标签: python

我遇到了需要在python中支持多个参数的问题。 例如, 如果-A,-B,-C是选项。 如果-A作为参数传递,它应该包含-i选项。 如果-B作为参数传递,它应该包含-s选项。 如果-A和-B作为参数传递,则它应包含-i和-s选项。

例如,

它应该支持以下 1. -A -i 2

  1. -B -s 5

  2. -A -B -i 2 -s 4

  3. -B -A -i 4 -s 5

  4. -A -B -s 5 -i 4

  5. 请让我知道如何做到这一点。 我能够实现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")
    

    请帮助我摆脱这个问题。

    谢谢, 阿维纳什

2 个答案:

答案 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