diff options
Diffstat (limited to 'doc/core/howto/listings/process/process.py')
-rwxr-xr-x | doc/core/howto/listings/process/process.py | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/doc/core/howto/listings/process/process.py b/doc/core/howto/listings/process/process.py new file mode 100755 index 0000000..95579e5 --- /dev/null +++ b/doc/core/howto/listings/process/process.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python + +# Copyright (c) Twisted Matrix Laboratories. +# See LICENSE for details. + +from twisted.internet import protocol +from twisted.internet import reactor +import re + +class MyPP(protocol.ProcessProtocol): + def __init__(self, verses): + self.verses = verses + self.data = "" + def connectionMade(self): + print "connectionMade!" + for i in range(self.verses): + self.transport.write("Aleph-null bottles of beer on the wall,\n" + + "Aleph-null bottles of beer,\n" + + "Take one down and pass it around,\n" + + "Aleph-null bottles of beer on the wall.\n") + self.transport.closeStdin() # tell them we're done + def outReceived(self, data): + print "outReceived! with %d bytes!" % len(data) + self.data = self.data + data + def errReceived(self, data): + print "errReceived! with %d bytes!" % len(data) + def inConnectionLost(self): + print "inConnectionLost! stdin is closed! (we probably did it)" + def outConnectionLost(self): + print "outConnectionLost! The child closed their stdout!" + # now is the time to examine what they wrote + #print "I saw them write:", self.data + (dummy, lines, words, chars, file) = re.split(r'\s+', self.data) + print "I saw %s lines" % lines + def errConnectionLost(self): + print "errConnectionLost! The child closed their stderr." + def processExited(self, reason): + print "processExited, status %d" % (reason.value.exitCode,) + def processEnded(self, reason): + print "processEnded, status %d" % (reason.value.exitCode,) + print "quitting" + reactor.stop() + +pp = MyPP(10) +reactor.spawnProcess(pp, "wc", ["wc"], {}) +reactor.run() |