'Execute the specified command on the server.
Note that this method is reading whole command outputs to memory, thus
shouldn\'t be used for large outputs.
:returns: data read from standard output of the command.
:raises: SSHExecCommandFailed if command returns nonzero
status. The exception contains command status stderr content.'

def exec_command(self, cmd):

    ssh = self._get_ssh_connection()
    transport = ssh.get_transport()
    channel = transport.open_session()
    channel.fileno()
    channel.exec_command(cmd)
    channel.shutdown_write()
    out_data = []
    err_data = []
    poll = select.poll()
    poll.register(channel, select.POLLIN)
    start_time = time.time()
    while True:
        ready = poll.poll(self.channel_timeout)
        if (not any(ready)):
            if (not self._is_timed_out(start_time)):
                continue
            raise exceptions.TimeoutException("Command:    '{0}'    executed    on    host    '{1}'.".format(cmd, self.host))
        if (not ready[0]):
            continue
        out_chunk = err_chunk = None
        if channel.recv_ready():
            out_chunk = channel.recv(self.buf_size)
            out_data += (out_chunk,)
        if channel.recv_stderr_ready():
            err_chunk = channel.recv_stderr(self.buf_size)
            err_data += (err_chunk,)
        if (channel.closed and (not err_chunk) and (not out_chunk)):
            break
    exit_status = channel.recv_exit_status()
    if (0 != exit_status):
        raise exceptions.SSHExecCommandFailed(command=cmd, exit_status=exit_status, strerror=''.join(err_data))
    return ''.join(out_data)
