From d57a6d9dc2311d5d14f73c3b76359b4fb9cb71cc Mon Sep 17 00:00:00 2001 From: Ryan Petrello Date: Mon, 21 May 2018 13:51:50 -0400 Subject: [PATCH] properly handle read timeouts with use_poll=True see: https://github.com/pexpect/pexpect/issues/491 --- pexpect/utils.py | 2 +- tests/test_misc.py | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/pexpect/utils.py b/pexpect/utils.py index d901ae0e..f7745196 100644 --- a/pexpect/utils.py +++ b/pexpect/utils.py @@ -165,7 +165,7 @@ def poll_ignore_interrupts(fds, timeout=None): poller = select.poll() for fd in fds: - poller.register(fd) + poller.register(fd, select.POLLIN | select.POLLPRI | select.POLLHUP | select.POLLERR) while True: try: diff --git a/tests/test_misc.py b/tests/test_misc.py index 118de2e0..6052b6ae 100755 --- a/tests/test_misc.py +++ b/tests/test_misc.py @@ -87,6 +87,12 @@ def test_read_poll(self): remaining = child.read().replace(_CAT_EOF, b'') self.assertEqual(remaining, b'abc\r\n') + def test_read_poll_timeout(self): + " Test use_poll properly times out " + child = pexpect.spawn('sleep 5', use_poll=True) + with self.assertRaises(pexpect.TIMEOUT): + child.expect(pexpect.EOF, timeout=1) + def test_readline_bin_echo(self): " Test spawn('echo'). " # given,