2017-10-25 11 views
0

アクセス/ダウンロードの一定回数後にPython Webサーバーをシャットダウンする方法を見つけようとしています。ダウンロード/ファイル・アクセスの一定数に達した後、私は、提供を停止したい定義済みのアクセス数/ダウンロード数の後にPython Webサーバーがシャットダウンする

import http.server, socketserver 

port = 8800 
handler = http.server.SimpleHTTPRequestHandler 
httpd = socketserver.TCPServer(("", port), handler) 
httpd.serve_forever() 

:私は単に次のコードでのPythonのWebサーバを実行します。

単一のファイルへのアクセスは、通常のように記録されます。

192.168.0.1- - [01/Jan/1970 00:00:00] "GET /file.txt HTTP/1.1" 200 - 

は、直接Webサーバのログを解析し、それに応じて反応するが方法ですか?

たとえば、ある特定の回数が"GET .* 200 -に達した場合、配信を停止します。

+0

さて、あなたは 'http.server.SimpleHTTPRequestHandler'をサブクラス化し、派生クラスは、あなたが要求してやりたいことができます。 – ForceBru

+0

こんにちは@SaAtomic、_inner-python_ソリューションが必要ですか?あるいはUNIXのようなbashスクリプトでは外部のものになるかもしれませんか? –

+0

あなたが望むことをするためにサーバーを拡張することができます。 – dcg

答えて

1

特定の数に達すると、要求の数をカウントしてhttpサーバーを終了できます。これは、仕事ができるか非常に基本的な例です。

import http.server, socketserver 
import sys 

def shutdown(fn): 
    def wrapper(*args, **kw): 
     cls = args[0] 

     if cls.count > 5: 
      print ("shutting down server") 
      sys.exit(0) 
     else: 
      return fn(*args,**kw) 
    return wrapper 


class myHandler(http.server.SimpleHTTPRequestHandler): 
    count = 0 

    def __init__(self, *args, **kwargs): 
     super().__init__(*args, **kwargs) 

    @shutdown 
    def do_GET(self, *args, **kwargs): 
     myHandler.count += 1 
     super().do_GET(*args, **kwargs) 

    @shutdown 
    def do_POST(self, *args, **kwargs): 
     self.count += 1 
     super().do_POST(*args, **kwargs) 


port = 8800 
handler = myHandler 
httpd = socketserver.TCPServer(("", port), handler) 
httpd.serve_forever() 
+0

は、シャットダウンがすぐには機能しないため、微調整が必​​要ですが、これを私のプロジェクトに使うことは間違いありません!どうもありがとうございました! – SaAtomic

+0

exit関数は動作しません。単純に 'SystemExit'例外が発生し、それをどうするのか分かりません。 – SaAtomic

+0

これは3.6.2でうまく動作します(Linux) –

関連する問題