2

我目前有以下代码:

import argparse

parser = argparse.ArgumentParser(description='Adds a new modem to Iridium account')
parser.add_argument('imei', metavar='I', nargs=1, help='the modems IMEI')
parser.add_argument('-t1', '--type1', metavar='t1', nargs=1, choices=('email', 'directip', 'sbddevice'), default='directip', help='Call type (default: directip)')
parser.add_argument('-a1', '--address1', metavar='a1', nargs=1, default='75.101.138.217:9097', help='Call address (default: 75.101.138.217:9097)')
parser.add_argument('-t2', '--type2', metavar='t2', nargs=1, choices=('email', 'directip', 'sbddevice'), help='Call type')
parser.add_argument('-a2', '--address2', metavar='a2', nargs=1, help='Call address')
parser.add_argument('-t3', '--type3', metavar='t3', nargs=1, choices=('email', 'directip', 'sbddevice'), help='Call type')
parser.add_argument('-a3', '--address3', metavar='a3', nargs=1, help='Call address')
parser.add_argument('-t4', '--type4', metavar='t4', nargs=1, choices=('email', 'directip', 'sbddevice'), help='Call type')
parser.add_argument('-a4', '--address4', metavar='a4', nargs=1, help='Call address')
parser.add_argument('-t5', '--type5', metavar='t5', nargs=1, choices=('email', 'directip', 'sbddevice'), help='Call type')
parser.add_argument('-a5', '--address5', metavar='a5', nargs=1, help='Call address')

args = parser.parse_args()

有没有办法可以将所有 -t 和 -a 组合成 -m1、-m2、-m3、-m4、-m5 其中 t 是参数的第一个值,下面的选择相同,-a 是第二个参数但不限于与第一个值相同的选择?看起来您应该能够做到这一点,否则您必须稍后进行大量检查以查看是否存在 t1 和 a1 ,因为如果用户提供了一个,则他们需要提供另一个。

所以-t1 email -a1 test@email.com你可以做而不是做-m1 email test@gmail.com

4

2 回答 2

2

不确定这是否会帮助任何人,但我最终按照亚历克斯的建议做了。唯一的事情是我使用~而不是:因为我必须使用端口处理 IP 地址,所以使用:会搞砸。

于 2010-07-30T15:53:05.137 回答
1

老问题,但我自己正在学习这个,并认为我会发布一个答案。该nargs参数可以解决这个问题,但显然不能与 结合choices,因为它也适用于电子邮件地址:

import argparse

parser = argparse.ArgumentParser(
    description='Adds a new modem to Iridium account',
    formatter_class=argparse.ArgumentDefaultsHelpFormatter
)
parser.add_argument('imei', metavar='I', help="the modem's IMEI")
parser.add_argument('-m1', nargs=2, metavar=("type","address"), default=['directip', '75.101.138.217:9097'], help='Call setting')
parser.add_argument('-m2', nargs=2, metavar=("type","address"), help='Call setting')
parser.add_argument('-m3', nargs=2, metavar=("type","address"), help='Call setting')
parser.add_argument('-m4', nargs=2, metavar=("type","address"), help='Call setting')
parser.add_argument('-m5', nargs=2, metavar=("type","address"), help='Call setting')

args = parser.parse_args()

type1 = args.multi1[0]
address1 = args.multi1[1]
if not type1 in ['email', 'directip', 'sbddevice']:
    args.print_help()
    sys.exit(1)
...
于 2016-04-29T19:35:34.353 回答