diff --git a/tools/python/jwutils/Cmds.py b/tools/python/jwutils/Cmds.py index 293d87d..5385252 100644 --- a/tools/python/jwutils/Cmds.py +++ b/tools/python/jwutils/Cmds.py @@ -67,6 +67,7 @@ class Cmds: # export formatter_class=argparse.ArgumentDefaultsHelpFormatter, description=self.__description) self.__parser.add_argument('--log-flags', help='Log flags', default=log_flags) self.__parser.add_argument('--log-level', help='Log level', default=log_level) + self.__parser.add_argument('--backtrace', help='Show exception backtraces', action='store_true', default=False) if self.__modules == None: self.__modules = [ '__main__' ] subcmds = set() @@ -97,6 +98,7 @@ class Cmds: # export self.args = self.__parser.parse_args(args=argv) set_flags(self.args.log_flags) set_level(self.args.log_level) + self.__back_trace = self.args.backtrace # This is the toplevel parser, i.e. no func member has been added to the args via # @@ -110,7 +112,17 @@ class Cmds: # export self.__parser.print_help() return None - return await self.args.func(self.args) + if self.__back_trace: + ret = await self.args.func(self.args) + else: + try: + ret = await self.args.func(self.args) + except Exception as e: + if hasattr(e, 'message'): + slog(ERR, e.message) + else: + slog(ERR, f'Exception: {type(e)}: {e}') + sys.exit(1) def __del__(self): if self.__own_eloop: