Python argparse:单值参数但允许在命令行上多次指定

时间:2014-03-27 00:38:18

标签: python python-2.7 argparse

在python argparse中,是否可以声明一个只是单值的参数,而不是列表,但允许多次指定,最新的一个会覆盖之前的那个?

用例是,我正在编写一个Python程序,它从〜/ .xxxrc文件读取命令行参数,其中.xxxrc文件每行有一个命令行参数。我想允许用户通过命令行覆盖〜/ .xxxrc文件中的值。我的计划是在将@~/.xxxrc传递给argv之前隐式添加argparse,以便argparse读取文件。现在问题变成了我上面的问题。

有可能实现这种效果吗?如果没有,我的用例是否有其他替代解决方案。

2 个答案:

答案 0 :(得分:3)

argparse模块默认执行此操作。看一下这个例子,我们指定两次相同的标志,最后一个赢得:

import argparse
parser = argparse.ArgumentParser(description='example')
parser.add_argument('-a', '--add')
options = parser.parse_args(['-a', 'foo', '-a', 'bar'])
print 'add = {}'.format(options.add) # output: add = bar

答案 1 :(得分:1)

是的,您只需使用nargs='*'nargs='+'创建自定义操作。

这样的事情应该有效:

class GetLastAction(argparse.Action):
    def __call__(self, parser, namespace, values, option_string=None):
        if values:
            setattr(namespace, self.dest, values[-1])


parser = argparse.ArgumentParser()
parser.add_argument('-a', nargs='+', action=GetLastAction)