# Buggy code
def reset_output_generators(
    self, host_out, timeout=None, client=None, channel=None, encoding="utf-8"
):
    """Reset output generators for host output.

    :param host_out: Host output
    :type host_out: :py:class:`pssh.output.HostOutput`
    :param client: (Optional) SSH client
    :type client: :py:class:`pssh.ssh2_client.SSHClient`
    :param channel: (Optional) SSH channel
    :type channel: :py:class:`ssh2.channel.Channel`
    :param timeout: (Optional) Timeout setting
    :type timeout: int
    :param encoding: (Optional) Encoding to use for output. Must be valid
      `Python codec <https://docs.python.org/library/codecs.html>`_
    :type encoding: str

    :rtype: tuple(stdout, stderr)
    """
    channel = host_out.channel if channel is None else channel
    client = self.host_clients[host_out.host] if client is None else client
    stdout = client.read_output_buffer(
        client.read_output(channel, timeout=timeout), encoding=encoding
    )
    stderr = client.read_output_buffer(
        client.read_stderr(channel, timeout=timeout),
        prefix="\t[err]",
        encoding=encoding,
    )
    host_out.stdout = stdout
    host_out.stderr = stderr
    return stdout, stderr


# Traceback (ValueError)
Traceback (most recent call last):
File "./aws-instances", line 172, in <module>
main()
File "./aws-instances", line 73, in main
facts = remote_facts(ips)
File "./aws-instances", line 146, in remote_facts
out_kern = client.run_command('uname -r')
File "/home/user/do-aws-ec2-facts/aws/lib64/python3.6/site-packages/pssh/clients/native/parallel.py", line 223, in run_command
greenlet_timeout=greenlet_timeout)
File "/home/user/do-aws-ec2-facts/aws/lib64/python3.6/site-packages/pssh/clients/base_pssh.py", line 96, in run_command
self.get_output(cmd, output, timeout=greenlet_timeout)
File "/home/user/do-aws-ec2-facts/aws/lib64/python3.6/site-packages/pssh/clients/base_pssh.py", line 141, in get_output
(channel, host, stdout, stderr, stdin) = cmd.get(timeout=timeout)
File "src/gevent/greenlet.py", line 709, in gevent._greenlet.Greenlet.get
File "src/gevent/greenlet.py", line 317, in gevent._greenlet.Greenlet._raise_exception
File "/home/user/do-aws-ec2-facts/aws/lib64/python3.6/site-packages/gevent/_compat.py", line 47, in reraise
raise value.with_traceback(tb)
File "src/gevent/greenlet.py", line 766, in gevent._greenlet.Greenlet.run
File "/home/user/do-aws-ec2-facts/aws/lib64/python3.6/site-packages/pssh/clients/native/parallel.py", line 237, in _run_command
raise ex
File "/home/user/do-aws-ec2-facts/aws/lib64/python3.6/site-packages/pssh/clients/native/parallel.py", line 233, in _run_command
use_pty=use_pty, encoding=encoding, timeout=timeout)
File "/home/user/do-aws-ec2-facts/aws/lib64/python3.6/site-packages/pssh/clients/native/single.py", line 442, in run_command
channel = self.execute(_command, use_pty=use_pty)
File "/home/user/do-aws-ec2-facts/aws/lib64/python3.6/site-packages/pssh/clients/native/single.py", line 324, in execute
channel = self.open_session() if channel is None else channel
File "/home/user/do-aws-ec2-facts/aws/lib64/python3.6/site-packages/pssh/clients/native/single.py", line 297, in open_session
wait_select(self.session)
File "pssh/native/_ssh2.pyx", line 171, in pssh.native._ssh2.wait_select
File "/home/user/do-aws-ec2-facts/aws/lib64/python3.6/site-packages/gevent/select.py", line 145, in select
sel_results = _original_select(rlist, wlist, xlist, 0)
ValueError: filedescriptor out of range in select()

# Fixed code
def reset_output_generators(
    self, host_out, timeout=None, client=None, channel=None, encoding="utf-8"
):
    """Reset output generators for host output. This creates new
    generators for stdout and stderr for the provided host output, useful
    in cases where the previous generators have raised a Timeout but the
    remote command is still running.

    :param host_out: Host output
    :type host_out: :py:class:`pssh.output.HostOutput`
    :param client: (Optional) SSH client
    :type client: :py:class:`pssh.ssh2_client.SSHClient`
    :param channel: (Optional) SSH channel
    :type channel: :py:class:`ssh2.channel.Channel`
    :param timeout: (Optional) Timeout setting
    :type timeout: int
    :param encoding: (Optional) Encoding to use for output. Must be valid
      `Python codec <https://docs.python.org/library/codecs.html>`_
    :type encoding: str

    :rtype: tuple(stdout, stderr)
    """
    channel = host_out.channel if channel is None else channel
    client = self.host_clients[host_out.host] if client is None else client
    stdout = client.read_output_buffer(
        client.read_output(channel, timeout=timeout), encoding=encoding
    )
    stderr = client.read_output_buffer(
        client.read_stderr(channel, timeout=timeout),
        prefix="\t[err]",
        encoding=encoding,
    )
    host_out.stdout = stdout
    host_out.stderr = stderr
    return stdout, stderr