summaryrefslogtreecommitdiff
path: root/doc/core/howto/listings/process/process.py
diff options
context:
space:
mode:
Diffstat (limited to 'doc/core/howto/listings/process/process.py')
-rwxr-xr-xdoc/core/howto/listings/process/process.py46
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()