gpt4 book ai didi

python - pywin32 Windows 服务不想发送请求状态

转载 作者:太空宇宙 更新时间:2023-11-03 21:39:35 25 4
gpt4 key购买 nike

我有一个由 HTTPServer 制作的 python 服务器。我想将此服务器用作 Windows 服务:

这是服务器的样子:

class Handler(BaseHTTPRequestHandler):

def do_GET(self):
self.send_response(200)
self.wfile.write(bytes("Hi, guys.", "utf8"))


class Server:
def __init__(self, host, port):
self.http_server = HTTPServer((host, port), Handler)
self.thread = threading.Thread(target=self.http_server.serve_forever)

def start(self):
self.thread.start()

def stop(self):
self.http_server.shutdown()
self.thread.join()

@staticmethod
def do_job():
do_some_staff_here()
time.sleep(1)

所以,这很简单。为了创建 Windows 服务,我使用 pywin32。让我们看看我的代码:

 class AppServerSvc(win32serviceutil.ServiceFramework):
_svc_name_ = "TestService"
_svc_display_name_ = "TestService"

def __init__(self, args):
win32serviceutil.ServiceFramework.__init__(self, args)
self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
socket.setdefaulttimeout(60)
self.stop_requested = False

def SvcStop(self):
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
win32event.SetEvent(self.hWaitStop)
self.stop_requested = True

def SvcDoRun(self):
servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
servicemanager.PYS_SERVICE_STARTED,
(self._svc_name_, ''))
self.main()

def main(self):
server = Server("", 8080)
server.start()
while not self.stop_requested:
server.do_job()
server.stop()


if __name__ == '__main__':
win32serviceutil.HandleCommandLine(AppServerSvc)

还有一些问题:

  • 在通常的“服务”模式下(当我通过桌面应用程序启用它时),如果我尝试打开此页面,它不会响应。在 Debug模式下一切正常。
  • 当我删除 self.send_response(200) 时,服务在两种模式下都可以正常工作。

那么,这种行为的原因是什么?

更新

当我尝试执行 send_response() 时,我收到下一个错误:

'NoneType' object has no attribute 'write'

最佳答案

我在为 QGIS 编写插件时遇到了同样的错误在Python 3.7中。经过一番挖掘后发现 send_response()内部调用sys.stderr.write (在 log_message 中)和 stderr这里是空的。正如我所不知道的t know much about QGIS and python and plugins and all I can不知道为什么 s like that. I solved this by simply overriding我的插件中的 log_message`。

关于python - pywin32 Windows 服务不想发送请求状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52979088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com