【发布时间】:2021-12-17 16:08:16
【问题描述】:
我通常使用 python 库“telnetlib”
但我遇到了一个问题,我不知道如何解决。
代码如下:
def bbb():
tn = telnetlib.Telnet(Ip, port=23, timeout=20)
print(tn)
tn.write(bytes("Something no.1 \n", encoding='utf-8'))
time.sleep(10)
## ~~~ blah blah read data ~~~ ##
tn.mt_interact()
tn.write(bytes("Something no.2 \n", encoding='utf-8'))
tn.close()
time.sleep(1.5)
我想从 telnet 读取大量数据,但任何 tn.read 命令都不起作用.. (例如 tn.read_all())
所以我需要使用tn.mt_interact()
但是在那一行之后,代码不起作用,telnet 连接看起来只是暂停,所以我无法关闭 tn 连接。
令人惊讶的是,当我在 SPYDER(Anaconda) 上运行相同的代码时,它可以工作!!! 这可能吗?
我需要将此代码制作为 exe 文件
和 exe 文件不能同时工作:tn.mt_interact()
【问题讨论】:
-
我无法在连接到 Unix 机器的 Windows 10 上使用 Python 3.9 重现:
tn.read_until(':')tn.write(b'login\r')tn.read_until(':')tn.write(b'password\r')tn.write(b'password\r')tn.read_until(b'$ ')tn.write(b'ls\r')tn.read_until(b'$ ')tn.write(b'\x04')@9在 IDLE 中完美运行。 -
第二次阅读问题后,我认为在IDLE中使用
interact(或mt_interact)确实是不可能的,可能是因为io流的实现方式:你需要发送dummy 命令(只需键入 Enter)让interact读取并显示主机发送的内容。但不管怎样,interact只是为了能够快速看到发生了什么,而read_until或expect是首选方法。