我有一个HistoricRecvLine
,我用它作为twisted.internet.protocol.ProcessProtocol
类的接口。我可以毫无问题地从HistoricRecvLine
到协议获取信息,但我似乎无法找到另一种方式的神奇绑定:我也希望协议中的信息能够在CLI中显示。更清楚的是,我希望ProcessProtocol创建的子进程的stdout / stderr消息出现在HistoricRecvLine的CLI实现中。
任何人都知道如何做到这一点或者能指出正确的方向吗?
答案 0 :(得分:0)
Jean Paul Calderone在他的评论中提出了解决方案的暗示。
命令行具有对协议的引用。在协议中,创建一个方法set_cli_write_func(self, func)
,设置写入cli的正确方法。构造cli时,使用类似的方法在适当的协议上调用函数:
def lpr(self, message):
"""Print a message to the screen.
:type message: String
:param message: The message string.
"""
self.terminal.nextLine()
self.terminal.write(_format_message(message))
self.terminal.nextLine()
self.drawInputLine()
这样就可以从协议中调用此方法。
请注意,这会创建一种循环依赖关系,因此您需要在对象被销毁时进行检查。