【发布时间】:2021-04-09 01:16:35
【问题描述】:
几个小时以来,我一直在尝试通过 telnetlib 连接到 telnet 服务。我一直在尝试使用 telnetlib 来读取内容并与远程服务进行交互。我一直在使用此代码进行测试(使用 Python 3.9 版)
import telnetlib
HOST = "horizons.jpl.nasa.gov"
port = "6775"
tn = telnetlib.Telnet(HOST)
tn.open()
print(tn.read_until("Horizons> "))
tn.write("x\r")
tn.close()
print(tn.read_all())
我希望看到 JPL Horizons 系统的欢迎屏幕和提示符——提示符是“Horizons> ”,此时我希望程序输入退出代码“x”并进入。但是,程序没有响应,终端没有打印任何内容并超时(TimeoutError: [Errno 60] Operation timed out)。错误日志表明错误来自telnetlib.py的create_connection函数,具体是sock.connect(sa)。
我的代码有问题吗?如何确保建立连接并打印服务的输出以供使用?
如果没有:有没有其他方法可以使用 Python 自动进行 telnet 通信和读取输出?
-=更新=-
用另一个命令替换最初的tn.write(b"x\r"),试图从连接中实际获取一些内容和信息:
tn.write(b"sun\r")
tn.read_until(b" Select ... [E]phemeris, [F]tp, [M]ail, [R]edisplay, ?, <cr\
>:")
tn.write(b"x\r")
tn.read_until(b"Connection closed by foreign host.")
info = tn.read_until(b"Connection closed by foreign host.")
tn.close()
print(info)
print(tn.read_all().decode("utf-8"))
只打印到第一个提示,不输入sun\r(或者至少不打印结果),然后不结束程序,让我停留在“地平线>”提示。
【问题讨论】:
-
查看我的答案的更新,它解决了您更新的问题。