Python为argparse参数添加常量值

时间:2016-08-26 08:57:43

标签: python argparse

我用谷歌搜索了这个,但似乎无法找到这个问题是否已被提出过。我希望有一个值(比如说“blah”)总是出现在列表选项中,如果提供它们还有其他参数。

e.g。

import argparse
args = argparse.ArgumentParser()
args.add_argument("--foo", nargs="+")

args = args.parse_args(["--foo", "bar1", "bar2", "bar3"])
args.foo.append("blah")


print args.foo
['bar1', 'bar2', 'bar3', 'blah']

2 个答案:

答案 0 :(得分:2)

python argparse - optional append argument with choices的启发,这可能有点矫枉过正,但对于其他想要使用集合并为选项添加常量值的人来说,它可能会有用:

import argparse
DEFAULT = set(['blah'])
class DefaultSet(argparse.Action):
    def __call__(self, parser, namespace, values, option_string=None):
        default_set = DEFAULT
        if values:
            default_set.update(v)

        setattr(namespace, self.dest, default_set)

args = argparse.ArgumentParser()
args.add_argument("--foo", default=DEFAULT, action=DefaultSet,nargs="+")

args = args.parse_args(["--foo", "bar1", "bar2", "bar3"])

print args.foo
set(['bar1', 'blah', 'bar3', 'bar2'])

唯一的问题是仅在使用至少1个参数指定foo时才调用自定义操作。这就是为什么我必须在DEFAULT定义中加入add_argument

答案 1 :(得分:0)

argparse无法nargs列表添加一组固定值。

只需执行您已经执行的操作并明确附加到生成的列表中。