将该数字或关键字设置为单独的参数值并在嵌套列表中收集相关参数会更简单。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo')
parser.add_argument('--out')
parser.add_argument('--sample', nargs='+', action='append', metavar=('KEY','TSV'))
parser.print_help()
argv = "myprogram.py \
--foo bar \
--sample 1 input1.tsv \
--sample 2 input2a.tsv input2b.tsv input2c.tsv \
--sample 3 input3-filtered.tsv \
--out output.tsv"
argv = argv.split()
args = parser.parse_args(argv[1:])
print(args)
生产:
1031:~/mypy$ python3 stack44267794.py -h
usage: stack44267794.py [-h] [--foo FOO] [--out OUT] [--sample KEY [TSV ...]]
optional arguments:
-h, --help show this help message and exit
--foo FOO
--out OUT
--sample KEY [TSV ...]
Namespace(foo='bar', out='output.tsv',
sample=[['1', 'input1.tsv'],
['2', 'input2a.tsv', 'input2b.tsv', 'input2c.tsv'],
['3', 'input3-filtered.tsv']])
已经有大约收集一般key:value
对的问题。没有什么可以直接支持的。已经提出了各种各样的东西,但都归结为你自己解析对。
Is it possible to use argparse to capture an arbitrary set of optional arguments?
您已经添加了并发症,论据每个键的数量是可变的。这就排除了处理'--sample1 = input1'作为简单的字符串。
已经延伸了众所周知的POSIX
命令行标准。但是如果你想要超越这个范围,那么要准备好在(sys.argv)之前或(parse_known_args
extras
)之后处理参数。
你有没有考虑过建立argparser?计算命令行上'--sample'的数量并使用它来构建适当的argparser?这种环岛,但它可以让argparse完成繁重的工作。 – TemporalWolf