如何静默/安静 HTTPServer 和 BasicHTTPRequestHandler 的 stderr 输出?

问题描述 投票:0回答:3

我正在编写一个简单的 http 服务器作为我的项目的一部分。下面是我的脚本的框架:

from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler

class MyHanlder(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()
        self.wfile.write('<html><body><p>OK</p></body></html>')

httpd = HTTPServer(('', 8001), MyHanlder)
httpd.serve_forever()

我的问题:每次客户端连接到我的服务器时,如何抑制脚本生成的 stderr 日志输出?

我已经查看了 HTTPServer 类及其父类,但无法找到任何标志或函数调用来实现此目的。我也查看了 BaseHTTPRequestHandler 类,但找不到线索。我确信一定有办法。如果你这样做了,请与我和其他人分享;我很欣赏你的努力。

python httpserver basehttpserver
3个回答
154
投票

这可能会做到:

from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler

class MyHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()
        self.wfile.write('<html><body><p>OK</p></body></html>')
    def log_message(self, format, *args):
        return

httpd = HTTPServer(('', 8001), MyHandler)
httpd.serve_forever()

1
投票

要静默/安静 HTTP Server 和 Basic HTTPRequestHandler stderr 输出,您可以子类化 SimpleHTTPServer.SimpleHTTPRequestHandler 并重写 log_message 方法。这是您将覆盖的方法,没有文档字符串:

def log_message(self, format, *args):
    sys.stderr.write("%s - - [%s] %s\n" % (
        self.address_string(), 
        self.log_date_time_string(),
        format%args)
    )

0
投票

这个答案可能会迟到,但您也可以尝试更改/设置

sys.stdout
sys.stderr

import io

stream = io.StringIO()
if (sys.stdout is None) or (sys.stderr is None):
    sys.stdout, sys.stderr = stream, stream

它对我有用。

© www.soinside.com 2019 - 2024. All rights reserved.