【问题标题】:python telnet.mt_interact doesn't work in any IDE but SPYDERpython telnet.mt_interact 在任何 IDE 中都不起作用,但 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_untilexpect 是首选方法。

标签: python telnetlib


【解决方案1】:

根据 telnet 库,tn_interact 是一个多线程版本的交互,它只是模拟一个愚蠢的 telnet 客户端。

Telnet.interact()
Interaction function, emulates a very dumb Telnet client.

因此,即使它在 Spyder 中有效,使用 interact 或 tn_interact 也无法解决您的问题。

你得看看为什么读写功能不起作用。

连接是否成功打开? 设备是否在响应您的命令?

您需要调试并了解它为什么不通信

【讨论】:

    猜你喜欢
    • 2018-01-22
    • 2017-10-11
    • 2012-09-30
    • 2020-09-13
    • 1970-01-01
    • 2020-06-07
    • 2018-06-10
    • 2019-04-27
    • 2019-07-02
    相关资源
    最近更新 更多