Replace reactor.spawnProcess(proto, addr)with reactor.spawnProcess(proto, addr, ['maze'], {}).
Past experience shows that if you do not pass the name exe as the first argument, nothing useful will happen. However, I have yet to find a reasonable explanation of why this is happening.
global reactor. reactor, script. , .
, sleep(0.01), :
- .
time . - Twisted - , ,
time.sleep() () .
reactor.callLater() , , . (, ), .
, , , . , getWrit , . , - getWrit, .
, . getWrit, . dataReceived , (\n). getWrit.
- :
print 'Preall test works!'
from twisted.internet import reactor, protocol, defer
from twisted.python import log
import sys
print 'Imports done'
class PrgShell(protocol.Protocol):
data = ''
class PrgProto(protocol.ProcessProtocol):
def __init__(self, out):
print 'Prgproto instance made'
self.transportout = out.transport
self.out = out
def outReceived(self, data):
"""Called when process sends data. We send it on to transport, however if it 'I want input', we need to activate input."""
print 'Sub said: '+data
if data == "input":
print 'Sub wants input'
self.transportout.write("input")
d = self.out.getWrit()
d.addCallback(self.sendInput)
else:
self.transportout.write(data)
def sendInput(self, data):
self.transport.write(data)
def getWrit(self):
print 'Proto gave input to prg'
self.deferred = defer.deferred()
self.data = ''
return self.deferred
def connectionMade(self):
print 'Connected'
proto = self.PrgProto(self)
addr = "C:\\Documents and Settings\\papa\\My Documents\\Python\\Files\\Maze\\exe\\maze.exe"
reactor.spawnProcess(proto, addr, ['maze'], {})
print 'Procces spawned!'
def dataReceived(self, data):
print 'Data recived: '+data
self.data+=data
if self.data.endswith('\n'):
if self.deferred:
d, self.deferred = self.deferred, None
d.callback(self.data)
self.data = ''
print 'About to do stuff'
factory = protocol.ServerFactory()
factory.protocol = PrgShell
reactor.listenTCP(8000,factory)
print 'Runing'
reactor.run()