我意识到这个问题相当笼统,但我不知道如何问我在做什么,但这里有。
我想创建一个允许以下格式选项的工具,该工具也使用自定义操作:
tool.py {start|stop|restart|configure}
上述每个命令都是互斥的,有些可以有单独的唯一选项。所有人都将调用自定义操作(子类 argparse.Action)。
tool.py start
以上将什么都不做,因为没有定义任何参数(通过“add_argument()”)。
我想制作一个子解析器,但除非你通过“set_defaults()”设置默认参数,否则这样做最初不起作用。但是,这样做并设置:
class CustomAction(argparse.Action):
def __call__(self, parser, namespace, values, option_string=None):
print('Args: %r %r %r' % (namespace, values, option_string))
setattr(namespace, self.dest, values)
parser = argparse.ArgumentParser(help="Basic daemon.")
subparsers = parser.add_subparsers()
start_parser = subparsers.add_parser("start")
start_parser.set_defaults(start=True, action=CustomAction)
似乎没有按预期启动自定义操作。下面是我得到的输出:
$ custom_parser.py start
Namespace(action=<class '__main__.BasicAction'>, start=True)
我可以看到正在分配值,但没有调用。
我基本上希望有可以在没有子参数的情况下指定的独占父选项,但如果需要,仍然允许像这样的独占子参数:
tool.py configure {interval|recipients}
有任何想法吗?