from twisted.internet import protocol, reactor class SSHTransport(protocol.ProcessProtocol): def outReceived(self, data): print "out", data def errReceived(self, data): print "err", data def processEnded(self, reason): print "process died", reason def connectionMade(self): self.transport.write('hello\n') childFDs = {0:'w', 1:'r'} args = ('/usr/bin/ssh', '-oProtocol=2', 'localhost') reactor.spawnProcess(SSHTransport(), args[0], args=args, childFDs=childFDs) reactor.run()