如何将argparse.Action子类化以添加自定义操作?

时间:2017-11-10 22:56:12

标签: python python-2.7 subclass argparse

我有一个命令行脚本我尝试运行,如果值不存在,则在命名空间中插入一个默认值,或者如果它存在,则按原样提供参数。

所以我想这样做:

myscript.py --merge

会导致参数解析器Namespace看起来像这样:

命名空间(合并=' - 合并&#39)

否则,如果我打电话

myscript.py

命名空间应如下所示:

命名空间(合并=' DONTMERGE&#39)

我认为我需要继承argparse.Action类的调用方法来执行此处指定的自定义操作:https://pymotw.com/2/argparse/但我无法确定如何做到这一点。

我认为这样的事情可以解决问题:

class CustomAction(argparse.Action):
    def __call__(self, parser, namespace, values, option_string=None):
        if isinstance(self.values, None):
            self.values = 'NOMERGE'
        else:
            self.values = '--nomerge'
        setattr(namespace, self.dest, values)

不幸的是,我没有得到预期的结果。

1 个答案:

答案 0 :(得分:3)

我认为你只需要一个正常的store_const参数。

parser.add_argument('--merge', action='store_const', const='MERGE', default='DONTMERGE')

如果您使用--merge调用脚本,merge参数的值为MERGE(上面指定为const)。否则,merge参数的值为DONTMERGE(上面指定为default)。

请参阅https://docs.python.org/2/library/argparse.html#action