1

組み込みの Web サーバーを実装する Python スクリプトがあります。

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 ディスプレイ全体に飛び散ります。

クラスの一部のtry...exception周りにブロックを追加しようとしましたが、効果がありませんでした。do_GETBaseHTTPRequestHandler

このコードで Python トレースバック メッセージを黙らせるにはどうすればよいですか?

4

1 に答える 1

2

handle_errorのメソッドをオーバーライドしてみてくださいBaseServer:

class MyServer(SocketServer.TCPServer):

    def handle_error(self, request, client_address):
        pass

次に、関数で使用MyServerしますstart_server

于 2015-12-27T22:58:01.923 に答える