在python argparse
中,是否可以声明一个只是单值的参数,而不是列表,但允许多次指定,最新的一个会覆盖之前的那个?
用例是,我正在编写一个Python程序,它从〜/ .xxxrc文件读取命令行参数,其中.xxxrc文件每行有一个命令行参数。我想允许用户通过命令行覆盖〜/ .xxxrc文件中的值。我的计划是在将@~/.xxxrc
传递给argv
之前隐式添加argparse
,以便argparse
读取文件。现在问题变成了我上面的问题。
有可能实现这种效果吗?如果没有,我的用例是否有其他替代解决方案。
答案 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)