2

这是一个简单的例子。

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'])
4

2 回答 2

1

正如其他人所提到的,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'])
于 2013-01-01T13:16:17.573 回答
0

您应该存储const而不是附加它,使用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'])
于 2013-01-01T12:43:32.757 回答