几个小时以来,我一直试图通过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
(或至少不打印结果),然后不结束程序,让我停留在“地平线”上>;“提示
你忘了使用端口。您也没有按照库的要求将正确的参数传递给
open()
或传递字节。这里有一个有效的例子您没有在任何地方使用
port
变量,因此telnetlib
正在尝试连接到端口23。试试这个:还要注意,您需要为telnetlib函数提供字节而不是字符串
更新1
看起来您应该发送
\n
来终止命令,而不是\r
。以下代码适用于我:相关问题 更多 >
编程相关推荐