def METHOD_NAME(self, cmd: str, timeout: Optional[float] = None, ignore_status: bool = False,  # pylint: disable=too-many-arguments
        verbose: bool = True, new_session: bool = False, log_file: Optional[str] = None, retry: int = 1,
        watchers: Optional[List[StreamWatcher]] = None, change_context: bool = False) -> Result:
    watchers = self._setup_watchers(verbose=verbose, log_file=log_file, additional_watchers=watchers)
    # in `@retrying` retry==0 means retrying `sys.maxsize * 2 + 1`, we never want that
    if retry == 0:
        retry = 1
    @retrying(n=retry)
    def _run():
        start_time = time.perf_counter()
        if verbose:
            self.log.debug('Running command "%s"...', cmd)
        try:
            command_kwargs = dict(
                command=cmd, warn=ignore_status,
                encoding='utf-8',
                hide=True,
                watchers=watchers,
                timeout=timeout,
                env=os.environ, replace_env=True,
                in_stream=False
            )
            if new_session:
                with self._create_connection() as connection:
                    result = connection.local(**command_kwargs)
            else:
                result = self.connection.local(**command_kwargs)
            result.duration = time.perf_counter() - start_time
            result.exit_status = result.exited
            return result
        except (Failure, UnexpectedExit) as details:
            if hasattr(details, "result"):
                self._print_command_results(details.result, verbose, ignore_status)
            raise
    result = _run()
    self._print_command_results(result, verbose, ignore_status)
    return result