我正在使用
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:]
过后再做?
__call__
方法和可选的__init__
方法。关于Action
本身的文档: https://docs.python.org/3/library/argparse.html#argparse.Action - h4z3