2015-12-27 2 views
1

У меня есть сценарий Python, который реализует встроенный веб-сервер:Python BaseHTTPServer - избежать ошибок («сброс соединения пэра» и т.д.) от разрушения проклятий дисплея

class http_server(BaseHTTPRequestHandler): 
    def log_message(self, format, *args): 
     # prevent the BaseHTTPServer log messages, we use our own logging instead 
     return 
    def do_GET(self): 
     log("responding to http request from %s: %s" % (self.client_address[0], self.path)) 
     text_string = "Hello World" 
     self.send_response(200) 
     self.send_header("Content-type", "text/plain") 
     self.send_header("Content-Length", len(text_string)) 
     self.end_headers() 
     self.wfile.write(text_string) 

def start_server(): 
    try: 
    httpd = SocketServer.TCPServer(("", 8888), http_server) 
    httpd.serve_forever() 
    except Exception as e: 
     cleanup(None, None) 
     print "Error starting internal http server: %s" % repr(e) 
     sys.exit(1) 

# main script 
# does various things, initializes curses, etc. 
start_server() 

Это прекрасно работает, однако проблема заключается в том, что скрипт python также реализует экранное отображение состояния с использованием проклятий, запущенных в другом потоке. Когда на HTTP-сервере возникает ошибка (например, «сброс соединения с помощью одноранговой сети» и т. Д.), Трассировка питона, указывающая на указанную ошибку, разбрызгивается по моему хорошему отображению проклятий.

Я попытался добавить try...exception блоков вокруг do_GET части моего BaseHTTPRequestHandler класса, но это не имело никакого эффекта.

Как отключить сообщения трассировки Python в этом коде?

ответ

1

Попробуйте переопределение метода handle_error из BaseServer:

class MyServer(SocketServer.TCPServer): 

    def handle_error(self, request, client_address): 
     pass 

Затем используйте MyServer в вашей start_server функции.

+0

Спасибо, что, кажется, сделали трюк! –

Смежные вопросы