我有一个python模块,它使用Telnetlib打开与守护进程的连接,并能够发送命令并获得解析响应 . 这用于测试目的 . 但是,有时候守护进程也会发送异步消息 . 我目前的解决方案是使用“wait_for_message”方法启动线程以侦听telnet套接字 . 同时,在主线程中,我发送一个我知道将触发守护进程发送特定异步消息的命令 . 然后我只做thread.join()并等待它完成 .
import telnetlib
class Client():
def __init__(self, host, port):
self.connection = telnetlib.Telnet(host, port)
def get_info(self):
self.connection.write('getstate\r')
idx, _, _ = self.connection.expect(['good','bad','ugly'], timeout=1)
return idx
def wait_for_unexpected_message(self):
idx, _, _ = self.connection.expect(['error'])
然后当我编写测试时,我可以将模块用作自动化系统的一部分 .
client = Client()
client.connect('192.168.0.45', 6000)
if client.get_info() != 0:
# do stuff
else:
# do other stuff
它工作得非常好,直到我想处理异步消息 . 我一直在阅读Python的新asyncio库,但我还没有弄清楚如何做我需要它做的事情,或者即使我的用例会受益于asyncio .
所以我的问题是:使用asyncio有更好的方法来处理这个问题吗?我喜欢使用telnetlib,因为它具有expect()功能 . 使用简单的TCP套接字不适合我 .