我正在编写一个Python脚本来解析端口10001上远程telnet服务器的一些数据。基本上,当我输入:
$ telnet <host> 10001
终端打印出来:
Trying <host>...
Connected to static-<host>.nycmny.fios.verizon.net.
Escape character is '^]'.
# empty line for prompt
在评论的空行中,我应该键入如下命令('\n'
代表返回):
^Ai20101\n
# server prints out data
somedatalinehere
^]
# escape to telnet prompt like below
telnet>
telnet> quit\n
connection closed.
# returns to local terminal prompt
然而,当我在Python中这样做时:
tn = telnetlib.Telnet(host, 10001)
tn.read_until("\r\n", timeout=1) # nothing matched, returns ''
tn.read_until("", timeout=1) # nothing matched, returns ''
# thus
tn.write("^Ai20101\n")
time.sleep(0.1) # wait 0.1s for next prompt
tn.write("^]")
time.sleep(0.1)
tn.write("quit\n")
tn.read_all() # This hangs as if connection wasn't closed.
答案 0 :(得分:1)
实际命令提示符之前的所有输出($
符号或类似内容)都是由您自己的telnet客户端生成的,而不是由服务器生成的。
请尝试以下内容:
tn.read_until("$")
如果此操作成功,则表示您已连接好并可能发出命令。
read_all()
应该&#39;挂起&#39;引自docs:
Telnet.
的read_all()
强>读取所有数据直到EOF; 阻止,直到连接关闭。
修改强>
实际上,您发布了否服务器的响应。正如我之前所说,所有这些东西都是由客户生成的。
# the prompt starts here
是什么意思?我认为这意味着在所有输出之后你会显示一个命令提示符,看起来像这样:
ForceBru @ iMac-ForceBru:~ $
因此,您应该阅读此行,以确保连接成功。
答案 1 :(得分:0)