From e48fa1b00a307e53f4ca550996ead3e2c53128e8 Mon Sep 17 00:00:00 2001 From: Jan Lindemann Date: Sat, 4 Apr 2020 11:39:01 +0200 Subject: [PATCH] Cmds.py: Add early evaluation of --log-xxx jwutils.log.set_flags() and .set_level() is not set until after all commands are loaded. This can make debugging complicated. OTOH, command-line parsing is also not done until all commands are loaded, because they define the command line options. This commit adds some poor man's command line parsing for fetching --log-level and --log-flags only, and applying them before the commands are all loaded. Signed-off-by: Jan Lindemann --- tools/python/jwutils/Cmds.py | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/tools/python/jwutils/Cmds.py b/tools/python/jwutils/Cmds.py index 7e1ff51..93ec98c 100644 --- a/tools/python/jwutils/Cmds.py +++ b/tools/python/jwutils/Cmds.py @@ -14,10 +14,26 @@ class Cmds: # export self.__description = description self.__filter = filter self.__modules = modules + default_log_level = jwutils.log.NOTICE + default_log_flags = 'stderr,position,prio,color' + # poor man's parsing in the absence of a complete command-line definition + for i in range(1, len(sys.argv)): + if i >= len(sys.argv) - 1: + break + arg = sys.argv[i] + if arg == '--log-level': + i += 1 + default_log_level = sys.argv[i] + continue + if arg == '--log-flags': + default_log_flags = sys.argv[i] + continue + jwutils.log.set_flags(default_log_flags) + jwutils.log.set_level(default_log_level) self.__parser = argparse.ArgumentParser(usage=os.path.basename(sys.argv[0]) + ' [command] [options]', formatter_class=argparse.ArgumentDefaultsHelpFormatter, description=self.__description) - self.__parser.add_argument('--log-flags', help='Log flags', default='stderr,position,prio,color') - self.__parser.add_argument('--log-level', help='Log level', default=jwutils.log.NOTICE) + self.__parser.add_argument('--log-flags', help='Log flags', default=default_log_flags) + self.__parser.add_argument('--log-level', help='Log level', default=default_log_level) self.eloop = eloop self.__own_eloop = False if eloop is None: @@ -39,10 +55,9 @@ class Cmds: # export cmd.add_parser(subparsers) async def __run(self): - #async def __run(self): args = self.__parser.parse_args() - jwutils.log.set_level(args.log_level) jwutils.log.set_flags(args.log_flags) + jwutils.log.set_level(args.log_level) return await args.func(args) def __del__(self):