我有一个调用 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 就是你的叔叔。
