On this page
20.14. telnetlib — TelnetClient 端
源代码: Lib/telnetlib.py
telnetlib模块提供实现 Telnet 协议的Telnet类。有关该协议的详细信息,请参见 RFC 854。另外,它为协议字符(请参见下文)和 telnet 选项提供符号常量。 telnet 选项的符号名称遵循arpa/telnet.h
中的定义,其中前导TELOPT_
已删除。有关传统上arpa/telnet.h
中未包含的选项的符号名称,请参见模块源本身。
telnet 命令的符号常量为:IAC,DONT,DO,WONT,WILL,SE(子协商结束),NOP(无操作),DM(数据标记),BRK(break),IP(break过程),AO(中止输出),AYT(您在那里),EC(擦除字符),EL(擦除行),GA(前进),SB(子协商开始)。
-
- class *
telnetlib.
Telnet
([* host * [,* port * [,* timeout *]]])
- class *
不要重新打开已经连接的实例。
此类具有许多read_*()
方法。请注意,其中一些在读取连接结束时会引发EOFError,因为它们可能由于其他原因而返回空字符串。请参阅下面的个别说明。
在 2.6 版中进行了更改:添加了“超时”。
See also
RFC 854-Telnet 协议规范
Telnet 协议的定义。
20.14.1. Telnet 对象
Telnet个实例具有以下方法:
Telnet.
read_until
(* expected * [,* timeout *])- 读取直到遇到给定的字符串* expected ,或者直到 timeout *秒过去为止。
如果找不到匹配项,则返回任何可用的内容,可能是空字符串。如果连接已关闭并且没有可用的数据,请提高EOFError。
Telnet.
read_all
( )- 读取所有数据,直到 EOF;阻塞直到连接关闭。
Telnet.
read_some
( )- 读取至少一个字节的烹饪数据,除非命中 EOF。如果命中 EOF,则返回
''
。如果没有立即可用的数据,则阻止。
- 读取至少一个字节的烹饪数据,除非命中 EOF。如果命中 EOF,则返回
Telnet.
read_very_eager
( )- 读取所有可能不阻塞 I/O 的内容(渴望)。
如果连接已关闭并且没有可用的数据,则提高EOFError。如果没有可用的煮熟数据,则返回''
。除非处于 IAC 序列之中,否则不要阻塞。
Telnet.
read_eager
( )- 读取随时可用的数据。
如果连接已关闭并且没有可用的数据,则提高EOFError。如果没有可用的煮熟数据,则返回''
。除非处于 IAC 序列之中,否则不要阻塞。
Telnet.
read_lazy
( )- 处理并返回队列中已经存在的数据(延迟)。
如果连接已关闭且无可用数据,请提高EOFError。如果没有可用的煮熟数据,则返回''
。除非处于 IAC 序列之中,否则不要阻塞。
Telnet.
read_very_lazy
( )- 返回煮熟队列中的所有可用数据(非常懒惰)。
如果连接已关闭且无可用数据,请提高EOFError。如果没有可用的煮熟数据,则返回''
。此方法永远不会阻塞。
Telnet.
read_sb_data
( )- 返回在 SB/SE 对之间收集的数据(子选项 begin/end)。当使用
SE
命令调用回调时,回调应该访问这些数据。此方法永远不会阻塞。
- 返回在 SB/SE 对之间收集的数据(子选项 begin/end)。当使用
2.3 版的新Function。
Telnet.
open
(* host * [,* port * [,* timeout *]])- 连接到主机。可选的第二个参数是端口号,默认为标准 Telnet 端口(23)。可选的* timeout *参数以秒为单位指定用于阻止诸如连接try之类的操作的超时(如果未指定,将使用全局默认超时设置)。
不要try重新打开已连接的实例。
在 2.6 版中进行了更改:添加了“超时”。
Telnet.
msg
(* msg * [,** args *])- 当调试级别为
>
0 时,打印调试消息。如果存在其他参数,则使用标准的字符串格式运算符将它们替换为消息。
- 当调试级别为
Telnet.
set_debuglevel
(* debuglevel *)- 设置调试级别。 * debuglevel *的值越高,您获得的调试输出就越多(在
sys.stdout
上)。
- 设置调试级别。 * debuglevel *的值越高,您获得的调试输出就越多(在
Telnet.
close
( )- 关闭连接。
Telnet.
get_socket
( )- 返回内部使用的套接字对象。
Telnet.
fileno
( )- 返回内部使用的套接字对象的文件 Descriptors。
Telnet.
write
(* buffer *)- 将一个字符串写入套接字,将所有 IAC 字符加倍。如果连接被阻止,则可能会阻止。如果连接已关闭,则可能引发socket.error。
Telnet.
interact
( )- 交互Function,模拟非常笨拙的 TelnetClient 端。
Telnet.
mt_interact
( )- interact()的多线程版本。
Telnet.
expect
(* list * [,* timeout *])- 读取直到正则表达式列表中的一个匹配。
第一个参数是正则表达式的列表,这些正则表达式可以是已编译(regex objects
)或未编译(字符串)。可选的第二个参数是超时,以秒为单位;默认为无限期阻止。
返回三项的 Tuples:第一个匹配的正则表达式列表中的索引;匹配对象返回;Literals 会一直读到并包含 match 内容。
如果找到文件末尾且未读取任何文本,请引发EOFError。否则,当没有任何匹配项时,返回(-1, None, text)
,其中* text *是到目前为止接收到的文本(如果发生超时,则可以是空字符串)。
如果正则表达式以贪婪的匹配(例如.*
)结尾,或者如果多个表达式可以匹配同一 Importing,则结果是不确定的,并且可能取决于 I/O 时序。
Telnet.
set_option_negotiation_callback
(回调)- 每次在 Importing 流上读取 telnet 选项时,都会使用以下参数调用此* callback *(如果已设置):callback(telnet 套接字,命令(DO/DONT/WILL/WONT),option)。 telnetlib 之后没有其他动作。
20.14.2. Telnet 示例
一个简单的示例说明典型用法:
import getpass
import sys
import telnetlib
HOST = "localhost"
user = raw_input("Enter your remote account: ")
password = getpass.getpass()
tn = telnetlib.Telnet(HOST)
tn.read_until("login: ")
tn.write(user + "\n")
if password:
tn.read_until("Password: ")
tn.write(password + "\n")
tn.write("ls\n")
tn.write("exit\n")
print tn.read_all()