[Twisted-Python] The case of the missing Traceback
I was playing around with Twisted today and ran into a problem where Tracebacks aren't emitted on stderr after a deferred callback from a process called launched by reactor.spawnProcess. The simplified test case is below. I put "x = y" in the callback function to generate an exception, y doesn't exist. Uncomment "x = z" right before the callback and it produces the traceback on stderr just fine. System is Linux, Python 2.6 and Twisted 8.2. from twisted.internet import reactor, protocol, defer import sys def err(s): sys.stderr.write(s+'\n') sys.stderr.flush() def test(): err('test') cat = MyPP() reactor.spawnProcess(cat, "/bin/cat", ["cat", "-"], {}) d = cat.send("Hello world") d.addCallback(response) def response(resp): err('response called') x = y err(resp) class MyPP(protocol.ProcessProtocol): def __init__(self): self.defer = defer.Deferred() def outReceived(self, data): err("outReceived! with %d bytes" % len(data)) err(" %s" % data) self.defer.callback(data) def send(self, c): self.transport.write("%s\n" % c) #x = z return self.defer if(__name__=='__main__'): reactor.callWhenRunning(test) reactor.run()
participants (1)
-
Dan