def _process_command(self, cmd, sender):
        # this function is runned by a worker thread
        logger = self._logger.getChild('worker')
        try:
            arg_list = cmd.split()
            logger.debug('get cmd: ' + str(arg_list))
            args, unknown_args = self._cmd_parser.parse_known_args(arg_list)
            if len(unknown_args) > 0:
                logger.debug('unknown args: ' + str(unknown_args))  # pragma: no cover
            args.proc(args, sender)
        except __HOLE__ as e:
            # TODO maybe these processes could be hided in to cmd parser
            if e.code == 2:
                # reach here if no sub command is found in the cmd
                # direct command is processed here
                matched = self._cmd_parser.process_direct_commands(cmd, sender)
                if not matched:
                    # if no direct command is matching
                    # response to user that we cannot recognize the command
                    logger.debug('no known args found.')
                    sender.send_message('Unknown commands.')
            else:
                logger.exception('Unexpected SystemExit')  # pragma: no cover
dataset/ETHPy150Open KavenC/Linot/linot/command_server.py/CmdServer._process_command