【发布时间】:2018-03-30 06:09:32
【问题描述】:
我试图从一个不发送结束行或特殊字符的 telnet 服务器读取,以告诉 python telnet 客户端读取应该完成。然后将此数据发送到 tkinter 文本输入小部件,我希望它在其中不断更新从 telnet 服务器发送的新数据。存在的问题是我无法找到一种“不阻塞循环”的方法来从 telnet 服务器读取。谢谢
def Telnet_Client(self):
HOST = self.TelnetHostIP
tn = telnetlib.Telnet(HOST)
tn.write("s")
tnrecv = tn.read_until(">", timeout=1)
self.R.insert(tk.END, tnrecv)
tn.close()
我使用了 read_some() 但我没有获得所有数据,并且 read_until(">", timeout=1) 会阻止代码,因为它永远不会得到结束行或停止读取的命令
【问题讨论】:
-
为什么不使用线程?
-
但是如何停止永无止境的读取过程?
-
如果读取在后台线程上,您不需要需要停止读取;这就是使用线程的全部意义——线程可以阻塞直到有东西要读取,而你的其他线程继续运行。
-
但是,从后台线程与 tkinter GUI 对话是不可能的,而且解决方法有点麻烦,所以它不像听起来那么容易完全。
-
哇,这么多。我没想到会这么复杂。我打算切换到 python 3,但我遇到了 telnetlib 问题,所以现在我想要更改为 python 3