【发布时间】:2020-04-26 23:22:06
【问题描述】:
我正在使用 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:]
事后?
【问题讨论】:
-
1.您可以采取相反的方式 - 从解析器本身中删除默认值,稍后只需检查并附加默认值(如果为空)。 2. 你可能会尝试,比如,一个具有相同目标的互斥组?真正的
-c会有空的默认值,而虚拟的会有真正的默认值?我不确定这会奏效。我会玩这个想法并返回给你 -
3. “您还可以通过传递一个 Action 子类或其他实现相同接口的对象来指定任意操作。推荐的方法是扩展 Action,覆盖
__call__方法和可选的__init__方法。” +Action本身的文档:docs.python.org/3/library/argparse.html#argparse.Action
标签: python python-3.x command-line-interface argparse