这是一个简单的例子。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-a', action = 'append_const', dest = 'letter', const = 'a')
parser.add_argument('-b', action = 'append_const', dest = 'letter', const = 'b')
parser.set_defaults(letter = ['a', 'b'])
print(parser.parse_args('-a'.split()))
print(parser.parse_args('-b'.split()))
print(parser.parse_args(''.split()))
结果:
Namespace(letter=['a', 'b', 'a'])
Namespace(letter=['a', 'b', 'b'])
Namespace(letter=['a', 'b'])
如果没有set_defaults行,结果为:
Namespace(letter=['a'])
Namespace(letter=['b'])
Namespace(letter=None)
如何为这样的结果配置argparse?
Namespace(letter=['a'])
Namespace(letter=['b'])
Namespace(letter=['a', 'b'])
答案 0 :(得分:0)
您应该存储cost
而不是追加,使用action
'store_const'
(doc):
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-a', action = 'store_const', dest = 'letter', const = 'a')
parser.add_argument('-b', action = 'store_const', dest = 'letter', const = 'b')
parser.set_defaults(letter = ['a', 'b'])
print(parser.parse_args('-a'.split()))
print(parser.parse_args('-b'.split()))
print(parser.parse_args(''.split()))
结果:
Namespace(letter='a')
Namespace(letter='b')
Namespace(letter=['a', 'b'])
答案 1 :(得分:0)
正如其他人所提到的,store_const
几乎做了你想做的事,除了(正如@Theodros Zelleke指出的那样)-ab
无法正确解析。我认为解决该问题的最简单方法是在调用parse_args
之后简单处理无参数的情况:
import argparse
import sys
def parse_args(argv = sys.argv[1:]):
parser = argparse.ArgumentParser()
parser.add_argument('-a', action = 'append_const', dest = 'letter', const = 'a')
parser.add_argument('-b', action = 'append_const', dest = 'letter', const = 'b')
args = parser.parse_args(argv)
if args.letter is None:
args.letter = ['a','b']
return args
print(parse_args('-a'.split()))
print(parse_args('-b'.split()))
print(parse_args('-ab'.split()))
print(parse_args(''.split()))
产量
Namespace(letter=['a'])
Namespace(letter=['b'])
Namespace(letter=['a', 'b'])
Namespace(letter=['a', 'b'])