docs: def execute(self, cmdline, session=None):
          """
          Executes the command corresponding to the given line
  
          :param cmdline: Command line to parse
          :param session: Current shell session
          :return: True if command succeeded, else False
          """
          if session is None:
              # Default session
              session = beans.ShellSession(
                  beans.IOHandler(sys.stdin, sys.stdout), {}
              )
  
          assert isinstance(session, beans.ShellSession)
  
          # Split the command line
          if not cmdline:
              return False
  
          # Convert the line into a string
          cmdline = to_str(cmdline)
  
          try:
              line_split = shlex.split(cmdline, True, True)
          except ValueError as ex:
              session.write_line("Error reading line: {0}", ex)
              return False
  
          if not line_split:
              return False
  
          try:
              # Extract command information
              namespace, command = self.get_ns_command(line_split[0])
          except ValueError as ex:
              # Unknown command
              session.write_line(str(ex))
              return False
  
          # Get the content of the name space
          space = self._commands.get(namespace, None)
          if not space:
              session.write_line("Unknown name space {0}", namespace)
              return False
  
          # Get the method object
          method = space.get(command, None)
          if method is None:
              session.write_line("Unknown command: {0}.{1}", namespace, command)
              return False
  
          # Make arguments and keyword arguments
          args, kwargs = _make_args(
              line_split[1:], session, self._framework.get_properties()
          )
          try:
              # Execute it
              result = method(session, *args, **kwargs)
  
              # Store the result as $?
              if result is not None:
                  session.set(beans.RESULT_VAR_NAME, result)
  
              # 0, None are considered as success, so don't use not nor bool
              return result is not False
          except TypeError as ex:
              # Invalid arguments...
              self._logger.error(
                  "Error calling %s.%s: %s", namespace, command, ex
              )
              session.write_line("Invalid method call: {0}", ex)
              self.__print_namespace_help(session, namespace, command)
              return False
          except Exception as ex:
              # Error
              self._logger.exception(
                  "Error calling %s.%s: %s", namespace, command, ex
              )
              session.write_line("{0}: {1}", type(ex).__name__, str(ex))
              return False
          finally:
              # Try to flush in any case
              try:
                  session.flush()
              except IOError:
                  pass