Mat*_*ita 9 python command-line-interface argparse python-3.x
我正在使用库解析程序中的 CLI 参数argparse。我想解析一个可以重复的参数,具有以下行为:
到目前为止我有以下代码:
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())
Run Code Online (Sandbox Code Playgroud)
这适当地设置了一个默认列表,但是当参数出现时它不会以空列表开头。换句话说,第二个print语句打印正确的值(默认列表),但第一个语句打印
['avx', 'fbx', 'iasdf', 'fdas']
Run Code Online (Sandbox Code Playgroud)
代替
['iasdf', 'fdas']
Run Code Online (Sandbox Code Playgroud)
有没有办法argparse做我想做的事而不做类似的事情
if len(args.channel) > 2:
args.channel = args.channel[2:]
Run Code Online (Sandbox Code Playgroud)
事后?
有一个错误/问题正在讨论此行为。我为此写了几篇文章。
https://bugs.python.org/issue16399 argparse:带有默认列表的附加操作添加到列表而不是覆盖
目前唯一的变化是文档,而不是行为。
所有默认值都在解析开始时放置在命名空间中。对于普通操作,用户值会覆盖默认值。但在追加的情况下,它们只是添加到已有的内容中。它不会尝试区分默认放置的值和以前的用户值。
我认为最简单的解决方案是保留默认值,并在解析后检查None或空列表(我不记得是哪个),然后插入默认值。在 中进行所有解析不会获得额外的分数argparse。进行一些后期解析处理就可以了。
| 归档时间: |
|
| 查看次数: |
2381 次 |
| 最近记录: |