扭曲的命令行协议

时间:2013-05-17 09:20:52

标签: python twisted

我有一个HistoricRecvLine,我用它作为twisted.internet.protocol.ProcessProtocol类的接口。我可以毫无问题地从HistoricRecvLine到协议获取信息,但我似乎无法找到另一种方式的神奇绑定:我也希望协议中的信息能够在CLI中显示。更清楚的是,我希望ProcessProtocol创建的子进程的stdout / stderr消息出现在HistoricRecvLine的CLI实现中。

任何人都知道如何做到这一点或者能指出正确的方向吗?

1 个答案:

答案 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()

这样就可以从协议中调用此方法。

请注意,这会创建一种循环依赖关系,因此您需要在对象被销毁时进行检查。