#25485: Add context manager support to Telnet class.
Patch by Stéphane Wirtel.
This commit is contained in:
parent
37f5421954
commit
4f09806e66
|
@ -43,6 +43,17 @@ Character), EL (Erase Line), GA (Go Ahead), SB (Subnegotiation Begin).
|
|||
:exc:`EOFError` when the end of the connection is read, because they can return
|
||||
an empty string for other reasons. See the individual descriptions below.
|
||||
|
||||
A :class:`Telnet` object is a context manager and can be used in a
|
||||
:keyword:`with` statement. When the :keyword:`with` block ends, the
|
||||
:meth:`close` method is called::
|
||||
|
||||
>>> from telnetlib import Telnet
|
||||
>>> with Telnet('localhost', 23) as tn:
|
||||
... tn.interact()
|
||||
...
|
||||
|
||||
.. versionchanged:: 3.6 Context manager support added
|
||||
|
||||
|
||||
.. seealso::
|
||||
|
||||
|
|
|
@ -125,6 +125,13 @@ Previously, names of properties and slots which were not yet created on
|
|||
an instance were excluded. (Contributed by Martin Panter in :issue:`25590`.)
|
||||
|
||||
|
||||
telnetlib
|
||||
---------
|
||||
|
||||
:class:`~telnetlib.Telnet` is now a context manager (contributed by
|
||||
Stéphane Wirtel in :issue:`25485`).
|
||||
|
||||
|
||||
urllib.robotparser
|
||||
------------------
|
||||
|
||||
|
|
|
@ -637,6 +637,12 @@ class Telnet:
|
|||
raise EOFError
|
||||
return (-1, None, text)
|
||||
|
||||
def __enter__(self):
|
||||
return self
|
||||
|
||||
def __exit__(self, type, value, traceback):
|
||||
self.close()
|
||||
|
||||
|
||||
def test():
|
||||
"""Test program for telnetlib.
|
||||
|
@ -660,11 +666,10 @@ def test():
|
|||
port = int(portstr)
|
||||
except ValueError:
|
||||
port = socket.getservbyname(portstr, 'tcp')
|
||||
tn = Telnet()
|
||||
tn.set_debuglevel(debuglevel)
|
||||
tn.open(host, port, timeout=0.5)
|
||||
tn.interact()
|
||||
tn.close()
|
||||
with Telnet() as tn:
|
||||
tn.set_debuglevel(debuglevel)
|
||||
tn.open(host, port, timeout=0.5)
|
||||
tn.interact()
|
||||
|
||||
if __name__ == '__main__':
|
||||
test()
|
||||
|
|
|
@ -42,6 +42,11 @@ class GeneralTests(TestCase):
|
|||
telnet = telnetlib.Telnet(HOST, self.port)
|
||||
telnet.sock.close()
|
||||
|
||||
def testContextManager(self):
|
||||
with telnetlib.Telnet(HOST, self.port) as tn:
|
||||
self.assertIsNotNone(tn.get_socket())
|
||||
self.assertIsNone(tn.get_socket())
|
||||
|
||||
def testTimeoutDefault(self):
|
||||
self.assertTrue(socket.getdefaulttimeout() is None)
|
||||
socket.setdefaulttimeout(30)
|
||||
|
|
Loading…
Reference in New Issue