如何用argparse创建“对列表”类型的参数?

时间:2015-11-03 12:28:05

标签: python argparse

我需要让我的python脚本的最终用户输入类似的内容:

script.py -sizes <2,2> <3,3> <6,6>

其中-sizes选项的每个元素是一对两个正整数。如何使用argparse实现此目的?

2 个答案:

答案 0 :(得分:10)

定义自定义类型:

def pair(arg):
    # For simplity, assume arg is a pair of integers
    # separated by a comma. If you want to do more
    # validation, raise argparse.ArgumentError if you
    # encounter a problem.
    return [int(x) for x in arg.split(',')]

然后将其用作常规参数的类型:

p.add_argument('--sizes', type=pair, nargs='+')

然后

>>> p.parse_args('--sizes 1,3 4,6'.split())
Namespace(sizes=[[1, 3], [4, 6]])

答案 1 :(得分:1)

Argparse并未尝试涵盖所有可能的输入数据格式。您始终可以将sizes作为字符串,并使用几行代码解析它们:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--sizes', nargs='+')

args = parser.parse_args()

try:
    sizes = [tuple(map(int, s.split(',', maxsplit=1))) for s in args.sizes]
except Exception:
    print('sizes cannot be parsed')

print(sizes)

&#34;特殊情况不足以打破规则。&#34;