2016-11-23 9 views
1

単純なHTTPサーバーを作成し、pywin32を使用してWindowsサービスにしました。デバッガで実行されると、サーバーは要求を正常に処理しますが、実際のサービス内では要求を取得しますが、send_response操作でハングします。理由は何でしょうか?Python HTTP ServerがWindowsサービス内で応答を送信できない

from http.server import BaseHTTPRequestHandler, HTTPServer 
import win32serviceutil 
import win32service 
import sys 

PORT_NUMBER = 6363 

class myHandler(BaseHTTPRequestHandler): 
    def do_GET(self): 
     self.send_response(200) 
     self.send_header('Content-type', 'text/html') 
     self.end_headers() 
     self.wfile.write(bytes("Hello World !", "utf-8")) 
     return 

class TestSvc(win32serviceutil.ServiceFramework): 
    _svc_name_ = "TestSvc" 
    _svc_display_name_ = "Test Service" 
    _svc_description_ = "Tests server inside service." 

    def __init__(self, args): 
     win32serviceutil.ServiceFramework.__init__(self, args) 
     self.server = HTTPServer(('', PORT_NUMBER), myHandler) 

    def SvcDoRun(self): 
     self.ReportServiceStatus(win32service.SERVICE_RUNNING) 
     print('Started httpserver on port ', PORT_NUMBER) 
     self.server.serve_forever() 

    def SvcStop(self): 
     self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) 
     self.server.shutdown() 

#sys.frozen = 'windows_exe' 
if __name__ == '__main__': 
    win32serviceutil.HandleCommandLine(TestSvc, argv=sys.argv) 
+0

管理者として実行していますか?特権の問題かもしれない –

+0

pythonservice.exeは管理者として実行するように設定されています – Natalia

答えて

1

実際には、sys.stderr.write(BaseHTTPRequestHandlerのデフォルトのログ出力)を実行しているときにハングしていました。だから、私の要求ハンドラクラスのlog_message関数をオーバーライドして、今は正常に動作します。

関連する問題