如何使用 argparse 创建 "list of pairs" 类型的参数?
How to create argument of type "list of pairs" with argparse?
我需要让我的 python 脚本的最终用户键入如下内容:
script.py -sizes <2,2> <3,3> <6,6>
其中 -sizes
选项的每个元素都是一对两个正整数。如何使用 argparse
实现此目的?
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)
"Special cases aren't special enough to break the rules."
定义自定义类型:
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]])
我需要让我的 python 脚本的最终用户键入如下内容:
script.py -sizes <2,2> <3,3> <6,6>
其中 -sizes
选项的每个元素都是一对两个正整数。如何使用 argparse
实现此目的?
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)
"Special cases aren't special enough to break the rules."
定义自定义类型:
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]])