Files
hustoj/web/python-docs/library/telnetlib.html
2025-03-09 17:10:56 +08:00

459 lines
34 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh_CN">
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>telnetlib -- Telnet 客户端 &#8212; Python 3.8.20 文档</title><meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="../_static/pydoctheme.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/language_data.js"></script>
<script src="../_static/translations.js"></script>
<script src="../_static/sidebar.js"></script>
<link rel="search" type="application/opensearchdescription+xml"
title="在 Python 3.8.20 文档 中搜索"
href="../_static/opensearch.xml"/>
<link rel="author" title="关于这些文档" href="../about.html" />
<link rel="index" title="索引" href="../genindex.html" />
<link rel="search" title="搜索" href="../search.html" />
<link rel="copyright" title="版权所有" href="../copyright.html" />
<link rel="next" title="uuid --- RFC 4122 定义的UUID对象" href="uuid.html" />
<link rel="prev" title="smtpd --- SMTP 服务器" href="smtpd.html" />
<link rel="canonical" href="https://docs.python.org/3/library/telnetlib.html" />
<style>
@media only screen {
table.full-width-table {
width: 100%;
}
}
</style>
<link rel="shortcut icon" type="image/png" href="../_static/py.svg" />
<script type="text/javascript" src="../_static/copybutton.js"></script>
<script type="text/javascript" src="../_static/menu.js"></script>
</head>
<body>
<div class="mobile-nav">
<input type="checkbox" id="menuToggler" class="toggler__input" aria-controls="navigation"
aria-pressed="false" aria-expanded="false" role="button" aria-label="Menu" />
<label for="menuToggler" class="toggler__label">
<span></span>
</label>
<nav class="nav-content" role="navigation">
<a href="https://www.python.org/" class="nav-logo">
<img src="../_static/py.svg" alt="Logo"/>
</a>
<div class="version_switcher_placeholder"></div>
<form role="search" class="search" action="../search.html" method="get">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" class="search-icon">
<path fill-rule="nonzero"
d="M15.5 14h-.79l-.28-.27a6.5 6.5 0 001.48-5.34c-.47-2.78-2.79-5-5.59-5.34a6.505 6.505 0 00-7.27 7.27c.34 2.8 2.56 5.12 5.34 5.59a6.5 6.5 0 005.34-1.48l.27.28v.79l4.25 4.25c.41.41 1.08.41 1.49 0 .41-.41.41-1.08 0-1.49L15.5 14zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z" fill="#444"></path>
</svg>
<input type="text" name="q" aria-label="快速搜索"/>
<input type="submit" value="转向"/>
</form>
</nav>
<div class="menu-wrapper">
<nav class="menu" role="navigation" aria-label="main navigation">
<div class="language_switcher_placeholder"></div>
<h3><a href="../contents.html">目录</a></h3>
<ul>
<li><a class="reference internal" href="#"><code class="xref py py-mod docutils literal notranslate"><span class="pre">telnetlib</span></code> -- Telnet 客户端</a><ul>
<li><a class="reference internal" href="#telnet-objects">Telnet 对象</a></li>
<li><a class="reference internal" href="#telnet-example">Telnet 示例</a></li>
</ul>
</li>
</ul>
<h4>上一个主题</h4>
<p class="topless"><a href="smtpd.html"
title="上一章"><code class="xref py py-mod docutils literal notranslate"><span class="pre">smtpd</span></code> --- SMTP 服务器</a></p>
<h4>下一个主题</h4>
<p class="topless"><a href="uuid.html"
title="下一章"><code class="xref py py-mod docutils literal notranslate"><span class="pre">uuid</span></code> --- <strong>RFC 4122</strong> 定义的UUID对象</a></p>
<div role="note" aria-label="source link">
<h3>本页</h3>
<ul class="this-page-menu">
<li><a href="../bugs.html">报告 Bug</a></li>
<li>
<a href="https://github.com/python/cpython/blob/3.8/Doc/library/telnetlib.rst"
rel="nofollow">显示源代码
</a>
</li>
</ul>
</div>
</nav>
</div>
</div>
<div id="outdated-warning" style="padding: .5em; text-align: center; background-color: #FFBABA; color: #6A0E0E;">
这个文档所针对的是一个已不再受支持的 Python 旧版本。
你应当升级版本,并阅读
<a href="/3/library/telnetlib.html"> Python 当前稳定版本的文档</a>.
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>导航</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="总目录"
accesskey="I">索引</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python 模块索引"
>模块</a> |</li>
<li class="right" >
<a href="uuid.html" title="uuid --- RFC 4122 定义的UUID对象"
accesskey="N">下一页</a> |</li>
<li class="right" >
<a href="smtpd.html" title="smtpd --- SMTP 服务器"
accesskey="P">上一页</a> |</li>
<li><img src="../_static/py.svg" alt="python logo" style="vertical-align: middle; margin-top: -1px"/></li>
<li><a href="https://www.python.org/">Python</a> &#187;</li>
<li class="switchers">
<div class="language_switcher_placeholder"></div>
<div class="version_switcher_placeholder"></div>
</li>
<li>
</li>
<li id="cpython-language-and-version">
<a href="../index.html">3.8.20 Documentation</a> &#187;
</li>
<li class="nav-item nav-item-1"><a href="index.html" >Python 标准库</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="internet.html" accesskey="U">互联网协议和支持</a> &#187;</li>
<li class="right">
<div class="inline-search" role="search">
<form class="inline-search" action="../search.html" method="get">
<input placeholder="快速搜索" aria-label="快速搜索" type="text" name="q" />
<input type="submit" value="转向" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
|
</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="module-telnetlib">
<span id="telnetlib-telnet-client"></span><h1><a class="reference internal" href="#module-telnetlib" title="telnetlib: Telnet client class."><code class="xref py py-mod docutils literal notranslate"><span class="pre">telnetlib</span></code></a> -- Telnet 客户端<a class="headerlink" href="#module-telnetlib" title="永久链接至标题"></a></h1>
<p><strong>源代码:</strong> <a class="reference external" href="https://github.com/python/cpython/tree/3.8/Lib/telnetlib.py">Lib/telnetlib.py</a></p>
<hr class="docutils" id="index-0" />
<p><a class="reference internal" href="#module-telnetlib" title="telnetlib: Telnet client class."><code class="xref py py-mod docutils literal notranslate"><span class="pre">telnetlib</span></code></a> 模块提供一个实现Telnet协议的类 <a class="reference internal" href="#telnetlib.Telnet" title="telnetlib.Telnet"><code class="xref py py-class docutils literal notranslate"><span class="pre">Telnet</span></code></a>。关于此协议的细节请参见 <span class="target" id="index-5"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc854.html"><strong>RFC 854</strong></a> 。此外,它还为协议字符(见下文)和 telnet 选项提供了对应的符号常量。telnet选项对应的符号名遵循 <code class="docutils literal notranslate"><span class="pre">arpa/telnet.h</span></code> 中的定义,但删除了前缀``TELNET_``。对于不在 <code class="docutils literal notranslate"><span class="pre">arpa/telnet.h</span></code> 的选项的符号常量名,请参考本模块源码。</p>
<p>telnet命令的符号常量名有 IAC, DONT, DO, WONT, WILL, SE (Subnegotiation End), NOP (No Operation), DM (Data Mark), BRK (Break), IP (Interrupt process), AO (Abort output), AYT (Are You There), EC (Erase Character), EL (Erase Line), GA (Go Ahead), SB (Subnegotiation Begin).</p>
<dl class="class">
<dt id="telnetlib.Telnet">
<em class="property">class </em><code class="sig-prename descclassname">telnetlib.</code><code class="sig-name descname">Telnet</code><span class="sig-paren">(</span><em class="sig-param">host=None</em>, <em class="sig-param">port=0</em><span class="optional">[</span>, <em class="sig-param">timeout</em><span class="optional">]</span><span class="sig-paren">)</span><a class="headerlink" href="#telnetlib.Telnet" title="永久链接至目标"></a></dt>
<dd><p><a class="reference internal" href="#telnetlib.Telnet" title="telnetlib.Telnet"><code class="xref py py-class docutils literal notranslate"><span class="pre">Telnet</span></code></a> 表示到 Telnet 服务器的连接. 实例初始化后默认不连接;必须使用 <a class="reference internal" href="#telnetlib.Telnet.open" title="telnetlib.Telnet.open"><code class="xref py py-meth docutils literal notranslate"><span class="pre">open()</span></code></a> 方法来建立连接。或者, 可选参数 host 和 port 也可以传递给构造函数,在这种情况下,到服务器的连接将在构造函数返回前建立。可选参数 <em>timeout</em> 为阻塞操作(如连接尝试)指定一个以秒为单位的超时时间(如果没有指定,将使用全局默认设置) 。</p>
<p>不要重新打开一个已经连接的实例。</p>
<p>这个类有很多 <code class="xref py py-meth docutils literal notranslate"><span class="pre">read_*()</span></code> 方法。 请注意,其中一些方法在读取结束时会触发 <a class="reference internal" href="exceptions.html#EOFError" title="EOFError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">EOFError</span></code></a> 异常,这是由于连接对象可能出于其它原因返回一个空字符串。 请参阅下面的个别描述。</p>
<p><a class="reference internal" href="#telnetlib.Telnet" title="telnetlib.Telnet"><code class="xref py py-class docutils literal notranslate"><span class="pre">Telnet</span></code></a> 对象一个上下文管理器,可以在 <a class="reference internal" href="../reference/compound_stmts.html#with"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">with</span></code></a> 语句中使用。当 <code class="xref std std-keyword docutils literal notranslate"><span class="pre">with</span></code> 块结束,<a class="reference internal" href="#telnetlib.Telnet.close" title="telnetlib.Telnet.close"><code class="xref py py-meth docutils literal notranslate"><span class="pre">close()</span></code></a> 方法会被调用:</p>
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">telnetlib</span> <span class="kn">import</span> <span class="n">Telnet</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">with</span> <span class="n">Telnet</span><span class="p">(</span><span class="s1">&#39;localhost&#39;</span><span class="p">,</span> <span class="mi">23</span><span class="p">)</span> <span class="k">as</span> <span class="n">tn</span><span class="p">:</span>
<span class="gp">... </span> <span class="n">tn</span><span class="o">.</span><span class="n">interact</span><span class="p">()</span>
<span class="gp">...</span>
</pre></div>
</div>
<div class="versionchanged">
<p><span class="versionmodified changed">在 3.6 版更改: </span>添加了上下文管理器的支持</p>
</div>
</dd></dl>
<div class="admonition seealso">
<p class="admonition-title">参见</p>
<dl class="simple">
<dt><span class="target" id="index-6"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc854.html"><strong>RFC 854</strong></a> - Telnet 协议规范</dt><dd><p>Telnet 协议的定义。</p>
</dd>
</dl>
</div>
<section id="telnet-objects">
<span id="id1"></span><h2>Telnet 对象<a class="headerlink" href="#telnet-objects" title="永久链接至标题"></a></h2>
<p><a class="reference internal" href="#telnetlib.Telnet" title="telnetlib.Telnet"><code class="xref py py-class docutils literal notranslate"><span class="pre">Telnet</span></code></a> 实例有以下几种方法:</p>
<dl class="method">
<dt id="telnetlib.Telnet.read_until">
<code class="sig-prename descclassname">Telnet.</code><code class="sig-name descname">read_until</code><span class="sig-paren">(</span><em class="sig-param">expected</em>, <em class="sig-param">timeout=None</em><span class="sig-paren">)</span><a class="headerlink" href="#telnetlib.Telnet.read_until" title="永久链接至目标"></a></dt>
<dd><p>读取直到遇到给定字节串 <em>expected</em><em>timeout</em> 秒已经过去。</p>
<p>当没有找到匹配时,返回可用的内容,也可能返回空字节。如果连接已关闭且没有可用的数据,将触发 <a class="reference internal" href="exceptions.html#EOFError" title="EOFError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">EOFError</span></code></a></p>
</dd></dl>
<dl class="method">
<dt id="telnetlib.Telnet.read_all">
<code class="sig-prename descclassname">Telnet.</code><code class="sig-name descname">read_all</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#telnetlib.Telnet.read_all" title="永久链接至目标"></a></dt>
<dd><p>读取数据,直到遇到 EOF连接关闭前都会保持阻塞。</p>
</dd></dl>
<dl class="method">
<dt id="telnetlib.Telnet.read_some">
<code class="sig-prename descclassname">Telnet.</code><code class="sig-name descname">read_some</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#telnetlib.Telnet.read_some" title="永久链接至目标"></a></dt>
<dd><p>在达到 EOF 前,读取至少一个字节的熟数据。如果命中 EOF返回 <code class="docutils literal notranslate"><span class="pre">b''</span></code>。如果没有立即可用的数据,则阻塞。</p>
</dd></dl>
<dl class="method">
<dt id="telnetlib.Telnet.read_very_eager">
<code class="sig-prename descclassname">Telnet.</code><code class="sig-name descname">read_very_eager</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#telnetlib.Telnet.read_very_eager" title="永久链接至目标"></a></dt>
<dd><p>在不阻塞 I/O 的情况下(急切地)读取所有的内容。</p>
<p>如果连接关闭并且没有可用的熟数据,将会触发 <a class="reference internal" href="exceptions.html#EOFError" title="EOFError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">EOFError</span></code></a> 。如果没有熟数据可用返回 <code class="docutils literal notranslate"><span class="pre">b''</span></code> 。除非在一个 IAC 序列的中间,否则不要阻塞。</p>
</dd></dl>
<dl class="method">
<dt id="telnetlib.Telnet.read_eager">
<code class="sig-prename descclassname">Telnet.</code><code class="sig-name descname">read_eager</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#telnetlib.Telnet.read_eager" title="永久链接至目标"></a></dt>
<dd><p>读取现成的数据。</p>
<p>如果连接关闭并且没有可用的熟数据,将会触发 <a class="reference internal" href="exceptions.html#EOFError" title="EOFError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">EOFError</span></code></a> 。如果没有熟数据可用返回 <code class="docutils literal notranslate"><span class="pre">b''</span></code> 。除非在一个 IAC 序列的中间,否则不要阻塞。</p>
</dd></dl>
<dl class="method">
<dt id="telnetlib.Telnet.read_lazy">
<code class="sig-prename descclassname">Telnet.</code><code class="sig-name descname">read_lazy</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#telnetlib.Telnet.read_lazy" title="永久链接至目标"></a></dt>
<dd><p>处理并返回已经在队列中的数据lazy</p>
<p>如果连接已关闭并且没有可用的数据,将会触发 <a class="reference internal" href="exceptions.html#EOFError" title="EOFError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">EOFError</span></code></a> 。如果没有熟数据可用则返回 <code class="docutils literal notranslate"><span class="pre">b''</span></code> 。除非在一个 IAC 序列的中间,否则不要进行阻塞。</p>
</dd></dl>
<dl class="method">
<dt id="telnetlib.Telnet.read_very_lazy">
<code class="sig-prename descclassname">Telnet.</code><code class="sig-name descname">read_very_lazy</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#telnetlib.Telnet.read_very_lazy" title="永久链接至目标"></a></dt>
<dd><p>返回熟数据队列任何可用的数据very lazy</p>
<p>如果连接已关闭并且没有可用的数据,将会触发 <a class="reference internal" href="exceptions.html#EOFError" title="EOFError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">EOFError</span></code></a> 。如果没有熟数据可用则返回 <code class="docutils literal notranslate"><span class="pre">b''</span></code> 。该方法永远不会阻塞。</p>
</dd></dl>
<dl class="method">
<dt id="telnetlib.Telnet.read_sb_data">
<code class="sig-prename descclassname">Telnet.</code><code class="sig-name descname">read_sb_data</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#telnetlib.Telnet.read_sb_data" title="永久链接至目标"></a></dt>
<dd><p>返回在 SB/SE 对之间收集的数据(子选项 begin/end。当使用 <code class="docutils literal notranslate"><span class="pre">SE</span></code> 命令调用回调函数时,该回调函数应该访问这些数据。该方法永远不会阻塞。</p>
</dd></dl>
<dl class="method">
<dt id="telnetlib.Telnet.open">
<code class="sig-prename descclassname">Telnet.</code><code class="sig-name descname">open</code><span class="sig-paren">(</span><em class="sig-param">host</em>, <em class="sig-param">port=0</em><span class="optional">[</span>, <em class="sig-param">timeout</em><span class="optional">]</span><span class="sig-paren">)</span><a class="headerlink" href="#telnetlib.Telnet.open" title="永久链接至目标"></a></dt>
<dd><p>连接主机。第二个可选参数是端口号,默认为标准 Telnet 端口23。可选参数 <em>timeout</em> 指定一个以秒为单位的超时时间用于像连接尝试这样的阻塞操作(如果没有指定,将使用全局默认超时设置)。</p>
<p>不要尝试重新打开一个已经连接的实例。</p>
<p class="audit-hook">触发 <a class="reference internal" href="sys.html#auditing"><span class="std std-ref">auditing event</span></a> <code class="docutils literal notranslate"><span class="pre">telnetlib.Telnet.open</span></code> ,参数为 <code class="docutils literal notranslate"><span class="pre">self</span></code><code class="docutils literal notranslate"><span class="pre">host</span></code><code class="docutils literal notranslate"><span class="pre">port</span></code></p>
</dd></dl>
<dl class="method">
<dt id="telnetlib.Telnet.msg">
<code class="sig-prename descclassname">Telnet.</code><code class="sig-name descname">msg</code><span class="sig-paren">(</span><em class="sig-param">msg</em>, <em class="sig-param">*args</em><span class="sig-paren">)</span><a class="headerlink" href="#telnetlib.Telnet.msg" title="永久链接至目标"></a></dt>
<dd><p>当 debug level <code class="docutils literal notranslate"><span class="pre">&gt;</span></code> 0 时打印一条 debug 信息。如果存在额外参数,则它们会被替换在使用标准字符串格式化操作符的信息中。</p>
</dd></dl>
<dl class="method">
<dt id="telnetlib.Telnet.set_debuglevel">
<code class="sig-prename descclassname">Telnet.</code><code class="sig-name descname">set_debuglevel</code><span class="sig-paren">(</span><em class="sig-param">debuglevel</em><span class="sig-paren">)</span><a class="headerlink" href="#telnetlib.Telnet.set_debuglevel" title="永久链接至目标"></a></dt>
<dd><p>设置调试级别</p>
</dd></dl>
<dl class="method">
<dt id="telnetlib.Telnet.close">
<code class="sig-prename descclassname">Telnet.</code><code class="sig-name descname">close</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#telnetlib.Telnet.close" title="永久链接至目标"></a></dt>
<dd><p>关闭连接对象。</p>
</dd></dl>
<dl class="method">
<dt id="telnetlib.Telnet.get_socket">
<code class="sig-prename descclassname">Telnet.</code><code class="sig-name descname">get_socket</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#telnetlib.Telnet.get_socket" title="永久链接至目标"></a></dt>
<dd><p>返回内部使用的套接字对象。</p>
</dd></dl>
<dl class="method">
<dt id="telnetlib.Telnet.fileno">
<code class="sig-prename descclassname">Telnet.</code><code class="sig-name descname">fileno</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#telnetlib.Telnet.fileno" title="永久链接至目标"></a></dt>
<dd><p>返回内部使用的套接字对象的文件描述符。</p>
</dd></dl>
<dl class="method">
<dt id="telnetlib.Telnet.write">
<code class="sig-prename descclassname">Telnet.</code><code class="sig-name descname">write</code><span class="sig-paren">(</span><em class="sig-param">buffer</em><span class="sig-paren">)</span><a class="headerlink" href="#telnetlib.Telnet.write" title="永久链接至目标"></a></dt>
<dd><p>向套接字写入一个字节字符串,将所有 IAC 字符加倍。如果连接被阻塞,这可能也会阻塞。如果连接关闭可能触发 <a class="reference internal" href="exceptions.html#OSError" title="OSError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">OSError</span></code></a></p>
<p class="audit-hook">触发 <a class="reference internal" href="sys.html#auditing"><span class="std std-ref">auditing event</span></a> <code class="docutils literal notranslate"><span class="pre">telnetlib.Telnet.write</span></code> ,参数为 <code class="docutils literal notranslate"><span class="pre">self</span></code><code class="docutils literal notranslate"><span class="pre">buffer</span></code></p>
<div class="versionchanged">
<p><span class="versionmodified changed">在 3.3 版更改: </span>曾经该函数抛出 <a class="reference internal" href="socket.html#socket.error" title="socket.error"><code class="xref py py-exc docutils literal notranslate"><span class="pre">socket.error</span></code></a>,现在这是 <a class="reference internal" href="exceptions.html#OSError" title="OSError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">OSError</span></code></a> 的别名。</p>
</div>
</dd></dl>
<dl class="method">
<dt id="telnetlib.Telnet.interact">
<code class="sig-prename descclassname">Telnet.</code><code class="sig-name descname">interact</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#telnetlib.Telnet.interact" title="永久链接至目标"></a></dt>
<dd><p>交互函数,模拟一个非常笨拙的 Telnet 客户端。</p>
</dd></dl>
<dl class="method">
<dt id="telnetlib.Telnet.mt_interact">
<code class="sig-prename descclassname">Telnet.</code><code class="sig-name descname">mt_interact</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#telnetlib.Telnet.mt_interact" title="永久链接至目标"></a></dt>
<dd><p>多线程版的 <a class="reference internal" href="#telnetlib.Telnet.interact" title="telnetlib.Telnet.interact"><code class="xref py py-meth docutils literal notranslate"><span class="pre">interact()</span></code></a>.</p>
</dd></dl>
<dl class="method">
<dt id="telnetlib.Telnet.expect">
<code class="sig-prename descclassname">Telnet.</code><code class="sig-name descname">expect</code><span class="sig-paren">(</span><em class="sig-param">list</em>, <em class="sig-param">timeout=None</em><span class="sig-paren">)</span><a class="headerlink" href="#telnetlib.Telnet.expect" title="永久链接至目标"></a></dt>
<dd><p>一直读取,直到匹配列表中的某个正则表达式。</p>
<p>第一个参数是一个正则表达式列表,可以是已编译的 (<a class="reference internal" href="re.html#re-objects"><span class="std std-ref">正则表达式对象</span></a>),也可以是未编译的 (字节串)。 第二个可选参数是超时,单位是秒;默认一直阻塞。</p>
<p>返回一个包含三个元素的元组:列表中的第一个匹配的正则表达式的索引;返回的匹配对象;包括匹配在内的读取过的字节。</p>
<p>如果找到了文件的结尾且没有字节被读取,触发 <a class="reference internal" href="exceptions.html#EOFError" title="EOFError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">EOFError</span></code></a>。否则,当没有匹配时,返回 <code class="docutils literal notranslate"><span class="pre">(-1,</span> <span class="pre">None,</span> <span class="pre">data)</span></code>,其中 <em>data</em> 是到目前为止接受到的字节(如果发生超时,则可能是空字节)。</p>
<p>如果一个正则表达式以贪婪匹配结束(例如 <code class="docutils literal notranslate"><span class="pre">.*</span></code>),或者多个表达式可以匹配同一个输出,则结果是不确定的,可能取决于 I/O 计时。</p>
</dd></dl>
<dl class="method">
<dt id="telnetlib.Telnet.set_option_negotiation_callback">
<code class="sig-prename descclassname">Telnet.</code><code class="sig-name descname">set_option_negotiation_callback</code><span class="sig-paren">(</span><em class="sig-param">callback</em><span class="sig-paren">)</span><a class="headerlink" href="#telnetlib.Telnet.set_option_negotiation_callback" title="永久链接至目标"></a></dt>
<dd><p>每次在输入流上读取 telnet 选项时,这个带有如下参数的 <em>callback</em> (如果设置了)会被调用: callback(telnet socket, command (DO/DONT/WILL/WONT), option)。telnetlib 之后不会再执行其它操作。</p>
</dd></dl>
</section>
<section id="telnet-example">
<span id="id2"></span><h2>Telnet 示例<a class="headerlink" href="#telnet-example" title="永久链接至标题"></a></h2>
<p>一个简单的说明性典型用法例子:</p>
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">getpass</span>
<span class="kn">import</span> <span class="nn">telnetlib</span>
<span class="n">HOST</span> <span class="o">=</span> <span class="s2">&quot;localhost&quot;</span>
<span class="n">user</span> <span class="o">=</span> <span class="nb">input</span><span class="p">(</span><span class="s2">&quot;Enter your remote account: &quot;</span><span class="p">)</span>
<span class="n">password</span> <span class="o">=</span> <span class="n">getpass</span><span class="o">.</span><span class="n">getpass</span><span class="p">()</span>
<span class="n">tn</span> <span class="o">=</span> <span class="n">telnetlib</span><span class="o">.</span><span class="n">Telnet</span><span class="p">(</span><span class="n">HOST</span><span class="p">)</span>
<span class="n">tn</span><span class="o">.</span><span class="n">read_until</span><span class="p">(</span><span class="sa">b</span><span class="s2">&quot;login: &quot;</span><span class="p">)</span>
<span class="n">tn</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">user</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s1">&#39;ascii&#39;</span><span class="p">)</span> <span class="o">+</span> <span class="sa">b</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">password</span><span class="p">:</span>
<span class="n">tn</span><span class="o">.</span><span class="n">read_until</span><span class="p">(</span><span class="sa">b</span><span class="s2">&quot;Password: &quot;</span><span class="p">)</span>
<span class="n">tn</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">password</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s1">&#39;ascii&#39;</span><span class="p">)</span> <span class="o">+</span> <span class="sa">b</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">tn</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="sa">b</span><span class="s2">&quot;ls</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">tn</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="sa">b</span><span class="s2">&quot;exit</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">tn</span><span class="o">.</span><span class="n">read_all</span><span class="p">()</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s1">&#39;ascii&#39;</span><span class="p">))</span>
</pre></div>
</div>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h3><a href="../contents.html">目录</a></h3>
<ul>
<li><a class="reference internal" href="#"><code class="xref py py-mod docutils literal notranslate"><span class="pre">telnetlib</span></code> -- Telnet 客户端</a><ul>
<li><a class="reference internal" href="#telnet-objects">Telnet 对象</a></li>
<li><a class="reference internal" href="#telnet-example">Telnet 示例</a></li>
</ul>
</li>
</ul>
<h4>上一个主题</h4>
<p class="topless"><a href="smtpd.html"
title="上一章"><code class="xref py py-mod docutils literal notranslate"><span class="pre">smtpd</span></code> --- SMTP 服务器</a></p>
<h4>下一个主题</h4>
<p class="topless"><a href="uuid.html"
title="下一章"><code class="xref py py-mod docutils literal notranslate"><span class="pre">uuid</span></code> --- <strong>RFC 4122</strong> 定义的UUID对象</a></p>
<div role="note" aria-label="source link">
<h3>本页</h3>
<ul class="this-page-menu">
<li><a href="../bugs.html">报告 Bug</a></li>
<li>
<a href="https://github.com/python/cpython/blob/3.8/Doc/library/telnetlib.rst"
rel="nofollow">显示源代码
</a>
</li>
</ul>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>导航</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="总目录"
>索引</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python 模块索引"
>模块</a> |</li>
<li class="right" >
<a href="uuid.html" title="uuid --- RFC 4122 定义的UUID对象"
>下一页</a> |</li>
<li class="right" >
<a href="smtpd.html" title="smtpd --- SMTP 服务器"
>上一页</a> |</li>
<li><img src="../_static/py.svg" alt="python logo" style="vertical-align: middle; margin-top: -1px"/></li>
<li><a href="https://www.python.org/">Python</a> &#187;</li>
<li class="switchers">
<div class="language_switcher_placeholder"></div>
<div class="version_switcher_placeholder"></div>
</li>
<li>
</li>
<li id="cpython-language-and-version">
<a href="../index.html">3.8.20 Documentation</a> &#187;
</li>
<li class="nav-item nav-item-1"><a href="index.html" >Python 标准库</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="internet.html" >互联网协议和支持</a> &#187;</li>
<li class="right">
<div class="inline-search" role="search">
<form class="inline-search" action="../search.html" method="get">
<input placeholder="快速搜索" aria-label="快速搜索" type="text" name="q" />
<input type="submit" value="转向" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
|
</li>
</ul>
</div>
<div class="footer">
&copy; <a href="../copyright.html">版权所有</a> 2001-2024, Python Software Foundation.
<br />
This page is licensed under the Python Software Foundation License Version 2.
<br />
Examples, recipes, and other code in the documentation are additionally licensed under the Zero Clause BSD License.
<br />
<br />
The Python Software Foundation is a non-profit corporation.
<a href="https://www.python.org/psf/donations/">Please donate.</a>
<br />
<br />
最后更新于 12月 09, 2024.
<a href="https://docs.python.org/3/bugs.html">Found a bug</a>?
<br />
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 2.4.4.
</div>
</body>
</html>