Twisted Python: Kann nicht in einen laufenden Spawn-Prozess schreiben
Meine Frage ist, dass der untergeordnete Prozess nach dem Starten eines Prozesses eine Schleife durchführt, um Daten von seinem Standard zu erhalten. Ich möchte neue Daten mit Echo.Process.pipes [0] .write (data) oder Echo.Process.writeToChild (0, data) darauf schreiben, aber beide funktionieren nicht. Würde jemand erklären, was los ist? Oder wie gehe ich um dieses Problem?
Dies ist der Fehler, den ich bekommen habe:
--- <exception caught here> ---
File "/usr/local/encap/python-2.6.4/lib/python2.6/site-packages/Twisted-9.0.0-py2.6-linux-x86_64.egg/twisted/internet/selectreactor.py", line 146, in _doReadOrWrite
why = getattr(selectable, method)()
File "/usr/local/encap/python-2.6.4/lib/python2.6/site-packages/Twisted-9.0.0-py2.6-linux-x86_64.egg/twisted/internet/tcp.py", line 460, in doRead
return self.protocol.dataReceived(data)
File "pp1.py", line 30, in dataReceived
Echo.Process.pipes[0].write(data)
exceptions.KeyError: 0
Danke dir,
Q
from sys import executable
from os import environ
import os
from twisted.internet import reactor
from twisted.internet.protocol import Protocol
from twisted.internet.protocol import Factory
from twisted.internet import protocol
import sys
implementation = """\
import os
import time
import sys
print "in child", os.getpid()
while (True):
a = raw_input("")
if a: print a
"""
class Echo(Protocol):
Process = None
def dataReceived(self, data):
if Echo.Process == None:
pp = MyPP()
Echo.Process = reactor.spawnProcess(pp, executable, [executable, "-c", implementation, data], env=environ, childFDs = {0:1, 1:1, 2:2})
else:
Echo.Process.pipes[0].write(data)
#Echo.Process.writeToChild(0,data)
self.transport.write(data)
class EchoFactory(Factory):
def buildProtocol(self, addr):
return Echo()
class MyPP(protocol.ProcessProtocol):
def connectionMade(self):
print "connectionMade!"
def outReceived(self, data):
print "out"
def errReceived(self, data):
print "error", data
def processExited(self, reason):
print "processExited"
def processEnded(self, reason):
print "processEnded"
print "quitting"
reactor.listenTCP(8200, EchoFactory())
print 'in parent', os.getpid()
reactor.run()