]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Added mt_interact() -- multithreaded version of interact().
authorGuido van Rossum <guido@python.org>
Wed, 23 Dec 1998 23:04:17 +0000 (23:04 +0000)
committerGuido van Rossum <guido@python.org>
Wed, 23 Dec 1998 23:04:17 +0000 (23:04 +0000)
interact() automatically uses this on Windows (where the
single-threaded version doesn't work).

Lib/telnetlib.py

index 8cf372e3f9d4d8b97e65b640582708c445975e35..efb2b4059ccdc198dd397068d7107be1899d0f1a 100644 (file)
@@ -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.