我有一个argparser
,有两个参数子集,输入和参数。我的命令看起来像
program -input1 <input1> -input2 <input2> -p1 <param1> -p2 <param2>
我很乐意
args = parser.parse_args()
params = vars(args.params)
而不是
params = {"p1": args.p1, "p2": args.p2, etc...}
有没有一种优雅的方法可以做到:
parser.add_argument("-p1", dest='p1', part_of=params)
Subparsers看起来它们不是为这个而生的。还是他们?你知道吗
Argparse有argument groups,但它们似乎只是为了帮助文本。你知道吗
谢谢!你知道吗
这听起来像是-如何接受任意“key=value”对的变体?这些年来,人们以各种方式问这个问题,给出了各种各样的答案。你知道吗
在最近的一篇文章中:
Parsing "python foo.py -DVAR1=9 -DVAR2=Off" with argparse
我的解决方案是将
-DVAR1=9
拆分成('VAR1',9)
,并将其附加到D
属性。使用自定义type
的。你知道吗Using variable arg names with argparse-在将
sys.argv
传递给解析器之前对其进行处理。你知道吗python argparse store foo=bar as args.key='foo', args.value='bar'
建议自定义
Action
类。你知道吗我想我们还建议使用一个定制的
Namespace
类。你知道吗分组值的内置机制是
nargs
和append
操作。一起你可以得到一系列的属性。你知道吗JSON字符串还可以用于输入复杂的数据结构。你知道吗
很明显,这可以通过多种方式进行优化——将键修剪为“p1”甚至“1”,保存到列表中,或者嵌套的名称空间或其他自定义结构,等等
这种方法仍然需要为每个“pn”变体定义一个
add_argument
。你知道吗另一种方法是保持
argparse
简单,生成如下名称空间:然后自己分组。你知道吗
相关问题 更多 >
编程相关推荐