Как успокоить SimpleHTTPServer?

У меня есть следующий простой потоковый файловый сервер, который будет использоваться моим приложением:

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" по каждому запросу? Спасибо

2 ответов


вы можете подкласс SimpleHTTPServer.SimpleHTTPRequestHandler и переопределить log_message метод. Вот метод, который вы будете переопределять, без docstring:

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

поэтому, чтобы просто игнорировать все сообщения, замените тело функции на pass. Для более тонкого контроля (i.e если вы все еще хотите напечатать сообщения об ошибках), вы можете вместо этого переопределить 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 имена модулей меняются, но эти методы не изменились.


запустите его таким образом в Bash:

python -m SimpleHTTPServer &>/dev/null