# -*- coding: utf-8 -*- """ Created on 2018-10-15 14:32:12 --------- @summary: å°è£ ArgumentParserï¼ ä½¿å ¶æ¯æfunctionï¼ è°ç¨startèªå¨æ§è¡ --------- @author: Boris @email: [email protected] """ import argparse class ArgumentParser(argparse.ArgumentParser): def __init__(self, *args, **kwargs): self.functions = {} super(ArgumentParser, self).__init__(*args, **kwargs) def add_argument(self, *args, **kwargs): function = kwargs.pop("function") if "function" in kwargs else None key = self._get_optional_kwargs(*args, **kwargs).get("dest") self.functions[key] = function return super(ArgumentParser, self).add_argument(*args, **kwargs) def start(self, args=None, namespace=None): args = self.parse_args(args=args, namespace=namespace) for key, value in vars(args).items(): # vars() 彿°è¿å对象objectç屿§å屿§å¼çåå ¸å¯¹è±¡ if value not in (None, False): if callable(self.functions[key]): if value != True: if isinstance(value, list) and len(value) == 1: value = value[0] self.functions[key](value) else: self.functions[key]() def run(self, args, values=None): if args in self.functions: if values: self.functions[args](values) else: self.functions[args]() else: raise Exception(f"æ æ¤æ¹æ³: {args}") if __name__ == "__main__": def test(): print("test not args func") def test2(args): print("test args func", args) parser = ArgumentParser(description="æµè¯") parser.add_argument("--test2", type=int, nargs=1, help="(1|2ï¼", function=test2) parser.add_argument("--test", action="store_true", help="", function=test) parser.start()