【发布时间】:2017-10-31 06:09:17
【问题描述】:
我想支持一个命令行界面,用户可以在其中声明任意数量的样本,每个样本对应一个或多个输入文件。像这样的:
$ myprogram.py \
--foo bar \
--sample1 input1.tsv \
--sample2 input2a.tsv input2b.tsv input2c.tsv \
--sample3 input3-filtered.tsv \
--out output.tsv
这个想法是选项键将匹配模式--sample(\d+),并且每个键将使用所有后续参数作为选项值,直到遇到下一个-或--前缀标志。对于显式声明的参数,这是argparse 模块通过nargs='+' 选项支持的常见用例。但由于我需要支持任意数量的参数,我无法明确声明它们。
parse_known_args 命令将允许我访问所有用户提供的参数,但那些未明确声明的参数将不会被分组到索引数据结构中。对于这些,我需要仔细检查参数列表,向前看有多少后续值对应于当前标志等。
有什么方法可以解析这些选项,而不必从头开始(几乎)重新实现参数解析器的大部分?
【问题讨论】:
-
您是否考虑过即时构建 argparser?计算您在命令行上拥有的
--sample的数量并使用它来构建适当的argparser?有点迂回,但它让 argparse 完成了繁重的工作。