我有一个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套接字不适合我。