2012-06-11 48 views
-1

在Echo協議的lineReceived方法中,我希望每次寫入child時都會生成一個延遲對象。它會等待結果,然後在子進程完成數據處理後打印結果。我需要找到一種方法來做到這一點。現在,MyPP的函數outReceived從子進程獲取結果。扭曲的Python:如何使一個等待來自子進程的數據的延遲對象?

謝謝

from sys import executable 
from os import environ 
import os 
from twisted.internet import reactor, defer 
from twisted.internet.protocol import Protocol 
from twisted.internet.protocol import Factory 
from twisted.internet import protocol 
from twisted.protocols.basic import LineReceiver 
import sys 
import time 
import math 

implementation = """ 
from filter import censor 
censor() 
"""       

class Echo(LineReceiver): 

    def lineReceived(self, data): 
     if self.factory.pp == None: 
      pp = MyPP() 
      self.factory.pp = reactor.spawnProcess(pp, executable, [executable, "-c", implementation], 
                    env=environ, childFDs = {0:"w", 1:"r", 2:"r"}) 
     self.factory.pp.writeToChild(0, data+'\r\n') 




class EchoFactory(Factory): 

    protocol = Echo 
    pp = None 


class MyPP(protocol.ProcessProtocol): 

    def connectionMade(self): 
     print "connectionMade!" 

    def outReceived(self, data): 
     pass 




reactor.listenTCP(11111, EchoFactory()) 
print 'in parent', os.getpid() 
reactor.run() 
+1

是的,但是你的問題是什麼?這目前看起來像「請爲我實現X」。你嘗試了什麼,它是如何失敗的,你卡在哪裏? –

+0

我的嘗試是在writeToChild行之後的Echo協議中的lineReceived中生成一個延遲對象。然後,我做了,addCallback(printData)。 printData是一個將數據廣播到Echo的所有實例的函數。 問題是回調(結果),我無法從MyPP的outReceived得到結果。當outReceived返回結果時,延遲對象如何知道? 我想知道我是否在正確的軌道上。我正在處理的新方法是使用將返回的延遲對象來包裝writeToChild調用。然後我會在outReceived中發起回調。 –

回答

1

你需要在你ProcessProtocol執行落實childDataReceived(childFD, data)。當數據從子進程到達時,這將被回調。見the API docs

相關問題