我正在用argparse
库解析程序中的CLI参数。我想解析一个可以重复的参数,其行为如下:
到目前为止,我有以下代码:
import argparse
ap = argparse.ArgumentParser(description="Change channel colours.")
ap.add_argument('-c', '--channel', action='append', default=['avx', 'fbx'])
print(ap.parse_known_args(['-c', 'iasdf', '-c', 'fdas']))
print(ap.parse_known_args())
这会适当地设置一个默认列表,但是当参数出现时,它不会以空列表开始。换句话说,第二个print
语句打印正确的值(默认列表),但第一个语句打印正确的值
['avx', 'fbx', 'iasdf', 'fdas']
而不是
['iasdf', 'fdas']
在argparse
中有没有一种方法可以做我想做的事情而不做类似的事情
if len(args.channel) > 2:
args.channel = args.channel[2:]
事后呢
讨论此行为时出现错误/问题。我为此写了几篇帖子
https://bugs.python.org/issue16399argparse:使用默认列表的追加操作将添加到列表而不是覆盖
目前唯一的变化是文档,而不是行为
解析开始时,所有默认值都放在名称空间中。对于普通操作,用户值将覆盖默认值。但是在append的例子中,它们只是添加到已经存在的内容中。它不会尝试区分默认设置的值和以前的用户值
我认为最简单的解决方案是保持默认值不变,并在解析后检查
None
或空列表(我不记得是哪个),然后插入默认值。在argparse
中进行所有解析不会得到额外的分数。稍微做一点后解析处理就可以了相关问题 更多 >
编程相关推荐