python telnet.mt_interact 在任何 IDE 中都不起作用,但 SPYDER
Posted
技术标签:
【中文标题】python telnet.mt_interact 在任何 IDE 中都不起作用,但 SPYDER【英文标题】:python telnet.mt_interact doesn't work in any IDE but SPYDER 【发布时间】: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
是首选方法。
【参考方案1】:
根据 telnet 库,tn_interact 是一个多线程版本的交互,它只是模拟一个愚蠢的 telnet 客户端。
Telnet.interact()
Interaction function, emulates a very dumb Telnet client.
因此,即使它在 Spyder 中有效,使用 interact 或 tn_interact 也无法解决您的问题。
你得看看为什么读写功能不起作用。
连接是否成功打开? 设备是否在响应您的命令?
您需要调试并了解它为什么不通信
【讨论】:
以上是关于python telnet.mt_interact 在任何 IDE 中都不起作用,但 SPYDER的主要内容,如果未能解决你的问题,请参考以下文章