如何安静SimpleHTTPServer?

时间:2012-05-18 10:38:28

标签: python simplehttpserver

我的应用程序使用以下简单的Threaded文件服务器:

class FileServer(Thread):
    """Simple file server exposing the current directory for the thumbnail
    creator
    """

    def __init__(self, port):
        Thread.__init__(self)
        self.port = port

        Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
        self.httpd = SocketServer.TCPServer(("", port), Handler)

    def run(self):
        self.httpd.serve_forever()

    def stop(self):
        self.httpd.shutdown()

如何防止SimpleHTTPServer在每次请求时输出“GET'http:// BLA BLA BLA”?感谢

3 个答案:

答案 0 :(得分:26)

您可以继承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))

因此,要简单地忽略所有消息,请用pass替换函数体。对于更细粒度的控制(即,如果您仍希望打印错误消息),您可以改为覆盖log_request和/或log_error方法。原始方法是这样的:

def log_request(self, code='-', size='-'):
    self.log_message('"%s" %s %s',
                     self.requestline, str(code), str(size))

def log_error(self, format, *args):
    self.log_message(format, *args)

从2.7到3.1,模块名称会发生​​变化,但这些方法不会改变。

答案 1 :(得分:13)

在Bash中以这种方式运行:

python -m SimpleHTTPServer &>/dev/null

答案 2 :(得分:0)

需要继承。

更简单的解决方案:

http_handler = SimpleHTTPServer.SimpleHTTPRequestHandler
http_handler.log_message = lambda a, b, c, d, e: None