我有一个调用 telnetlib.read_until() 的应用程序。在大多数情况下,它工作得很好。 然而,当我的应用程序的 telnet 连接失败时,很难调试确切的原因。是我的脚本问题还是服务器连接不可靠? (这是一个开发实验室,因此有很多狡猾的服务器)。
我想做的是能够在我的应用程序调用 telnetlib.read_until() 之前轻松窥探放入熟队列中的数据(从而希望避免影响我的应用程序的操作。)
在telnetlib.py中查看,我发现'buf[0]'正是我想要的数据:新添加的数据,没有因窥探'cookedq'而导致的重复。 我可以在 telnetlib.process_rawq() 末尾插入一行,以打印从服务器接收到的处理后的数据。
telnetlib.process_rawq ...
...
self.cookedq = self.cookedq + buf[0]
print("Dbg: Cooked Queue contents = %r" % buf[0] <= my added debug line
self.sbdataq = self.sbdataq + buf[1]
这个效果很好。我可以看到几乎与我的应用程序接收到的数据完全相同,而完全不影响其操作。
问题是:有没有更时髦的方法来实现这一点?这种方法很基本并且有效,但每次升级 Python 库时我都必须记住重新进行此更改。
我尝试简单地扩展 telnet.process_rawq() 没有成功,因为 buf 是 telnet.process_rawq() 的内部
有没有一种(更Pythonic)的方法可以在不修改telnetlib.py的情况下窥探这个telnetlib.process_rawq()内部值?
谢谢。
最佳答案
我刚刚找到了一个更好的解决方案(通过阅读代码,呃!)
telnetlib 已经内置了一个调试输出选项。只需调用 set_debuglevel(1),Bob 就是你的叔叔。
关于python - "Snooping"python的telnetlib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5572778/