2016-08-25 140 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-方法中捕獲異常)似乎都不起作用。

希望這可以幫助某人有時。