# Buggy code
def __init__(
    self, host, cmd, channel, stdout, stderr, stdin, exit_code=None, exception=None
):
    """
    :param host: Host name output is for
    :type host: str
    :param cmd: Command execution object
    :type cmd: :py:class:`gevent.Greenlet`
    :param channel: SSH channel used for command execution
    :type channel: :py:class:`socket.socket` compatible object
    :param stdout: Standard output buffer
    :type stdout: generator
    :param stderr: Standard error buffer
    :type stderr: generator
    :param stdin: Standard input buffer
    :type stdin: :py:func:`file`-like object
    :param exit_code: Exit code of command
    :type exit_code: int or None
    :param exception: Exception from host if any
    :type exception: :py:class:`Exception` or ``None``
    """
    dict.__init__(
        self,
        (
            ("host", host),
            ("cmd", cmd),
            ("channel", channel),
            ("stdout", stdout),
            ("stderr", stderr),
            ("stdin", stdin),
            ("exit_code", exit_code),
            ("exception", exception),
        ),
    )
    self.host = host
    self.cmd = cmd
    self.channel = channel
    self.stdout = stdout
    self.stderr = stderr
    self.stdin = stdin
    self.exception = exception
    self.exit_code = exit_code


# 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 __init__(
    self, host, cmd, channel, stdout, stderr, stdin, exit_code=None, exception=None
):
    """
    :param host: Host name output is for
    :type host: str
    :param cmd: Command execution object
    :type cmd: :py:class:`gevent.Greenlet`
    :param channel: SSH channel used for command execution
    :type channel: :py:class:`socket.socket` compatible object
    :param stdout: Standard output buffer
    :type stdout: generator
    :param stderr: Standard error buffer
    :type stderr: generator
    :param stdin: Standard input buffer
    :type stdin: :py:func:`file`-like object
    :param exit_code: Exit code of command
    :type exit_code: int or None
    :param exception: Exception from host if any
    :type exception: :py:class:`Exception` or ``None``
    """
    super(HostOutput, self).__init__(
        (
            ("host", host),
            ("cmd", cmd),
            ("channel", channel),
            ("stdout", stdout),
            ("stderr", stderr),
            ("stdin", stdin),
            ("exit_code", exit_code),
            ("exception", exception),
        )
    )
    self.host = host
    self.cmd = cmd
    self.channel = channel
    self.stdout = stdout
    self.stderr = stderr
    self.stdin = stdin
    self.exception = exception
    self.exit_code = exit_code