將該數字或關鍵字設置爲單獨的參數值並在嵌套列表中收集相關參數會更簡單。
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