diff --git a/pcl_expect.py b/pcl_expect.py index d1f3b7c3acbfd9222382e98d8e0c02e52e71b902..8c8e90f3d9ba41bb3901601e5f42f10adb83e7ce 100644 --- a/pcl_expect.py +++ b/pcl_expect.py @@ -6,6 +6,7 @@ import re import select import sets import sys +import telnetlib import types # @@ -55,18 +56,25 @@ class expectable: def fileno(self): return self.__fileno + def _read(self): + try: + s = os.read(self.fileno(), 8192) + except OSError, e: + if e.errno == errno.EIO: + debug("got EIO from fd %d" % self.fileno()) + s = "" + else: + raise + if s == "": + debug("got eof from fd %d" % self.fileno()) + return "", True + else: + return s, False + def fill_buffer(self): if not self.__eof_seen: - try: - s = os.read(self.fileno(), 8192) - except OSError, e: - if e.errno == errno.EIO: - debug("got EIO from fd %d" % self.fileno()) - s = "" - else: - raise - if s == "": - debug("got eof from fd %d" % self.fileno()) + s, eof = self._read() + if eof: self.__eof_seen = True else: debug("got %d bytes from fd %d" % (len(s), self.fileno())) @@ -143,6 +151,23 @@ class spawn(expectable): os.close(self.__pty) return os.waitpid(self.__child, 0) +class telnet(expectable): + def __init__(self, host, port): + self.telnet = telnetlib.Telnet(host, port) + + def _read(self): + try: + s = self.telnet.read_eager() + except EOFError: + return "", True + return s, False + + def send(self, s): + self.telnet.write(s) + + def fileno(self): + return self.telnet.fileno() + class impl: def __init__(self, timeout = None): self.__first = True