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