Python BaseHTTPServeR语言 防止错误("connection reset by peer,"等)破坏诅咒显示



我有一个Python脚本,它实现了一个内置的web服务器:

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脚本还使用在另一个线程中运行的curses实现了屏幕状态显示。当HTTP服务器中发生错误时(例如"对等方重置连接"等),指示所述错误的python回溯会在我漂亮的curses显示屏上显示。

我曾尝试在BaseHTTPRequestHandler类的do_GET部分周围添加try...exception块,但没有效果。

如何在该代码中静默Python回溯消息?

尝试重写BaseServer:的handle_error方法

class MyServer(SocketServer.TCPServer):
    def handle_error(self, request, client_address):
        pass

然后在start_server函数中使用MyServer

相关内容

最新更新