如何静默HTTPServer和BasicHTTPRequestHandler的stderr输出?
我正在写一个简单的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()
我想问的是:如何能让我的脚本在每次有客户端连接到我的服务器时,不输出错误日志?
我查看了HTTPServer类及其父类,但没有找到任何可以实现这个功能的标志或函数调用。我也看了BaseHTTPRequestHandler类,但也没有找到线索。我相信一定有办法。如果你知道,请分享给我和其他人;我非常感谢你的帮助。
3 个回答
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
对我来说,这个方法有效。
1
如果你想让HTTP服务器和基本的HTTP请求处理器的错误输出不那么吵闹,可以通过创建一个新的类来实现。具体来说,你可以从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)
)
155
这可能就能解决问题:
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()