2013-05-17 59 views
1

我有一个HistoricRecvLine,我用它作为twisted.internet.protocol.ProcessProtocol类的接口。我可以从HistoricRecvLine的协议中获得信息,但没有问题,但似乎无法找到神奇的绑定,换句话说就是:我希望协议中的信息显示在CLI中。为了更清楚,我希望ProcessProtocol创建的子进程的stdout/stderr消息显示在我的CLI中的HistoricRecvLine实现中。扭曲的命令行协议

任何人都知道如何做到这一点,或可以指向正确的方向?

+0

没有什么魔力。信息使用相同的机制向任一方向流动:使用数据调用方法。你能更具体地了解你遇到的问题吗? –

+0

@ Jean-PaulCalderone:编辑过的问题,是否更有意义? – Sardathrion

+0

不是。什么阻止你从协议中调用一个方法来处理你的CLI从你想要显示的数据的'ProcessProtocol'方法? –

回答

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

使这一方法被称为形式的协议。

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