我用谷歌搜索了这个,但似乎无法找到这个问题是否已被提出过。我希望有一个值(比如说“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']
答案 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
列表添加一组固定值。
只需执行您已经执行的操作并明确附加到生成的列表中。