From 82eae9eaa70eb1f58277bd7d08b996507c3e3ffe Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Wed, 23 Dec 1998 23:04:17 +0000 Subject: [PATCH] Added mt_interact() -- multithreaded version of interact(). interact() automatically uses this on Windows (where the single-threaded version doesn't work). --- Lib/telnetlib.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/Lib/telnetlib.py b/Lib/telnetlib.py index 8cf372e3f9..efb2b4059c 100644 --- a/Lib/telnetlib.py +++ b/Lib/telnetlib.py @@ -376,6 +376,9 @@ class Telnet: def interact(self): """Interaction function, emulates a very dumb telnet client.""" + if sys.platform == "win32": + self.mt_interact() + return while 1: rfd, wfd, xfd = select.select([self, sys.stdin], [], []) if self in rfd: @@ -393,6 +396,29 @@ class Telnet: break self.write(line) + def mt_interact(self): + """Multithreaded version of interact().""" + import thread + thread.start_new_thread(self.listener, ()) + while 1: + line = sys.stdin.readline() + if not line: + break + self.write(line) + + def listener(self): + """Helper for mt_interact() -- this executes in the other thread.""" + while 1: + try: + data = self.read_eager() + except EOFError: + print '*** Connection closed by remote host ***' + return + if data: + sys.stdout.write(data) + else: + sys.stdout.flush() + def expect(self, list, timeout=None): """Read until one from a list of a regular expressions matches. -- 2.50.1