14

アプリケーションで使用する次の単純なスレッドファイルサーバーがあります。

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 BLABLA」を出力しないようにするにはどうすればよいですか?ありがとう

4

3 に答える 3

29

メソッドをサブクラス化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。よりきめ細かい制御を行うには (つまり、エラー メッセージを出力したい場合)、代わりにlog_requestand/orlog_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 ではモジュール名が変更されていますが、これらのメソッドは変更されていません。

于 2012-05-18T10:50:39.207 に答える
13

Bash で次のように実行します。

python -m SimpleHTTPServer &>/dev/null
于 2012-05-18T10:48:52.467 に答える