2016-08-25 98 views
0

我目前正在使用Python的BaseHTTPServer,我需要覆盖服务器的handle_timeout()方法。Python - BaseHTTPServer - 覆盖“handle_timeout”方法

根据Python的文档(https://docs.python.org/2/library/basehttpserver.html),BaseHTTPServer是TCPServer的一个子类。 TCPServer执行我想覆盖的方法handle_timeouthttps://docs.python.org/2/library/socketserver.html#SocketServer.BaseServer.handle_timeout)。

我的代码目前看起来是这样的:

class newServer(BaseHTTPServer.HTTPServer): 

def handle_timeout(self): 
    print "Timeout!" 

class RequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): 

def setup(self): 
    self.timeout=2 
    BaseHTTPServer.BaseHTTPRequestHandler.setup(self) 


if __name__ == '__main__': 

server=newServer 

httpd = server((HOST_NAME, PORT_NUMBER), RequestHandler) 
print time.asctime(), "Server Starts - %s:%s" % (HOST_NAME, PORT_NUMBER) 
try: 
    httpd.serve_forever() 
except KeyboardInterrupt: 
    pass 


httpd.server_close() 
print time.asctime(), "Server Stops - %s:%s" % (HOST_NAME, PORT_NUMBER) 

自身工作超时,我收到以下消息来自服务器:

Request timed out: timeout('timed out',) 

的问题是,这是不是消息我想要打印。 任何帮助我的问题?

回答

0

任何有兴趣,尝试了几件事情出来后,我终于得出了结论:

根据这个文件(https://svn.python.org/projects/python/trunk/Lib/BaseHTTPServer.py),我直接复制从BaseHTTPRequestHandlerhandle_one_request - 方法的代码,并已覆盖了最后几行最后让我的代码工作。

我所有其他的尝试(在服务器类中覆盖它,在请求处理程序中或在main-方法中捕获异常)似乎都不起作用。

希望这可以帮助某人有时。