Great -- thanks! (and also to J. Ezequiel).

Mark T wrote:
"Eric Spaulding" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED]
Is there an easy way to pass arguments to a handler class that is used by the standard TCPServer?

normally --> srvr =SocketServer.TCPServer(('',port_num), TCPHandlerClass)

I'd like to be able to: srvr =SocketServer.TCPServer(('',port_num), TCPHandlerClass, (arg1,arg2))

And have arg1, arg2 available via TCPHandlerClass.__init__ or some other way.

Where TCPHandlerClass:

class TCPHandlerClass(SocketServer.StreamRequestHandler):
   def handle(self):
      #handle stream events here#


Thanks for any advice.


In the handler class, self.server refers to the server object, so subclass the server and override __init__ to take any additional server parameters and store them as instance variables.

import SocketServer

class MyServer(SocketServer.ThreadingTCPServer):
    def __init__(self, server_address, RequestHandlerClass,arg1,arg2):
        
SocketServer.ThreadingTCPServer.__init__(self,server_address,RequestHandlerClass)
        self.arg1 = arg1
        self.arg2 = arg2

class MyHandler(SocketServer.StreamRequestHandler):
    def handle(self):
        print self.server.arg1
        print self.server.arg2

if __name__ == '__main__':
    srv = MyServer(('',5000),MyHandler,123,456)
    srv.serve_forever()

--Mark


-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to