passing arguments to tcpserver classes

Mark T nospam at nospam.com
Thu Jun 14 00:56:51 EDT 2007


"Eric Spaulding" <els24 at cornell.edu> wrote in message 
news:mailman.9058.1181745026.32031.python-list at python.org...
> 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




More information about the Python-list mailing list