docs: def exec_command(self, cmd, tmp_path, sudo_user,sudoable=False, executable='/bin/sh'):
          ''' run a command on the remote host '''
  
          ssh_cmd = self._password_cmd()
          ssh_cmd += ["ssh", "-tt", "-q"] + self.common_args + [self.host]
  
          if not self.runner.sudo or not sudoable:
              if executable:
                  ssh_cmd.append(executable + ' -c ' + pipes.quote(cmd))
              else:
                  ssh_cmd.append(cmd)
          else:
              sudocmd, prompt = utils.make_sudo_cmd(sudo_user, executable, cmd)
              ssh_cmd.append(sudocmd)
  
          vvv("EXEC %s" % ssh_cmd, host=self.host)
          try:
              # Make sure stdin is a proper (pseudo) pty to avoid: tcgetattr errors
              import pty
              master, slave = pty.openpty()
              p = subprocess.Popen(ssh_cmd, stdin=slave,
                                   stdout=subprocess.PIPE, stderr=subprocess.PIPE)
              stdin = os.fdopen(master, 'w', 0)
          except:
              p = subprocess.Popen(ssh_cmd, stdin=subprocess.PIPE,
                                   stdout=subprocess.PIPE, stderr=subprocess.PIPE)
              stdin = p.stdin
  
          self._send_password()
  
          if self.runner.sudo and sudoable and self.runner.sudo_pass:
              fcntl.fcntl(p.stdout, fcntl.F_SETFL,
                          fcntl.fcntl(p.stdout, fcntl.F_GETFL) | os.O_NONBLOCK)
              sudo_output = ''
              while not sudo_output.endswith(prompt):
                  rfd, wfd, efd = select.select([p.stdout], [],
                                                [p.stdout], self.runner.timeout)
                  if p.stdout in rfd:
                      chunk = p.stdout.read()
                      if not chunk:
                          raise errors.AnsibleError('ssh connection closed waiting for sudo password prompt')
                      sudo_output += chunk
                  else:
                      stdout = p.communicate()
                      raise errors.AnsibleError('ssh connection error waiting for sudo password prompt')
              stdin.write(self.runner.sudo_pass + '\n')
              fcntl.fcntl(p.stdout, fcntl.F_SETFL, fcntl.fcntl(p.stdout, fcntl.F_GETFL) & ~os.O_NONBLOCK)
  
          # We can't use p.communicate here because the ControlMaster may have stdout open as well
          stdout = ''
          stderr = ''
          while True:
              rfd, wfd, efd = select.select([p.stdout, p.stderr], [], [p.stdout, p.stderr], 1)
              if p.stdout in rfd:
                  dat = os.read(p.stdout.fileno(), 9000)
                  stdout += dat
                  if dat == '':
                      p.wait()
                      break
              elif p.stderr in rfd:
                  dat = os.read(p.stderr.fileno(), 9000)
                  stderr += dat
                  if dat == '':
                      p.wait()
                      break
              elif p.poll() is not None:
                  break
          stdin.close() # close stdin after we read from stdout (see also issue #848)
  
          if p.returncode != 0 and stderr.find('Bad configuration option: ControlPersist') != -1:
              raise errors.AnsibleError('using -c ssh on certain older ssh versions may not support ControlPersist, set ANSIBLE_SSH_ARGS="" (or ansible_ssh_args in the config file) before running again')
  
          return (p.returncode, '', stdout, stderr)