2013-05-17 63 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() 

使這一方法被稱爲形式的協議。

請注意,這會創建一種循環依賴關係,因此您需要檢查對象何時被銷燬。