我有一个命令行脚本我尝试运行,如果值不存在,则在命名空间中插入一个默认值,或者如果它存在,则按原样提供参数。
所以我想这样做:
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)
不幸的是,我没有得到预期的结果。
答案 0 :(得分:3)
我认为你只需要一个正常的store_const
参数。
parser.add_argument('--merge', action='store_const', const='MERGE', default='DONTMERGE')
如果您使用--merge
调用脚本,merge
参数的值为MERGE
(上面指定为const
)。否则,merge
参数的值为DONTMERGE
(上面指定为default
)。