Python HTTP 服务器无法在 Windows 服务中发送响应
Python HTTP Server unable to send response inside Windows Service
我编写了一个简单的 HTTP 服务器,并使用 pywin32 将其变成了 Windows 服务。服务器在调试器中 运行 时成功处理请求,在实际服务中它收到请求但挂起 send_response 操作。可能是什么原因?
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)
实际上它在执行 sys.stderr.write 时挂起(这是 BaseHTTPRequestHandler 的默认日志输出)。所以我在我的请求处理程序 class 中覆盖了 log_message 函数,现在它工作正常。
我编写了一个简单的 HTTP 服务器,并使用 pywin32 将其变成了 Windows 服务。服务器在调试器中 运行 时成功处理请求,在实际服务中它收到请求但挂起 send_response 操作。可能是什么原因?
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)
实际上它在执行 sys.stderr.write 时挂起(这是 BaseHTTPRequestHandler 的默认日志输出)。所以我在我的请求处理程序 class 中覆盖了 log_message 函数,现在它工作正常。