gpt4 book ai didi

python - 在 cherrypy 服务中处理 sys.exit()

转载 作者:太空宇宙 更新时间:2023-11-04 01:44:16 24 4
gpt4 key购买 nike

当您启动/停止 python cherrypy 服务(使用 py2exe 编译)时,这工作正常当我收到 sys.exit() 调用(来 self 的错误处理程序)时,cherrypy 退出,但是服务仍然挂起。

代码:

import cherrypy
import win32serviceutil
import win32service
import sys

SERVICE = None

class HelloWorld:
""" Sample request handler class. """

def __init__(self):
self.iVal = 0

@cherrypy.expose
def index(self):
self.iVal += 1
if self.iVal == 5:
StopService(SERVICE)
return "Hello world! " + str(self.iVal)


class MyService(win32serviceutil.ServiceFramework):
"""NT Service."""

_svc_name_ = "CherryPyService"
_svc_display_name_ = "CherryPy Service"
_svc_description_ = "Some description for this service"

def SvcDoRun(self):
SERVICE = self
StartService()


def SvcStop(self):
StopService(SERVICE)


def StartService():

cherrypy.tree.mount(HelloWorld(), '/')

cherrypy.config.update({
'global':{
'tools.log_tracebacks.on': True,
'log.error_file': '\\Error_File.txt',
'log.screen': True,
'engine.autoreload.on': False,
'engine.SIGHUP': None,
'engine.SIGTERM': None
}
})

cherrypy.engine.start()
cherrypy.engine.block()


def StopService(classObject):
classObject.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
cherrypy.engine.exit()
classObject.ReportServiceStatus(win32service.SERVICE_STOPPED)



if __name__ == '__main__':
print sys.argv
win32serviceutil.HandleCommandLine(MyService)

任何建议都会很棒 :)

最佳答案

我不完全确定 sys.exit 调用的来源或您的首选行为是什么。当sys.exit被调用,然而,它引发了一个 SystemExit异常(exception)。你可以拦截它并继续你的方式:

import sys
try:
sys.exit()
except SystemExit:
print "Somebody called sys.exit()."
print "Still running."

... 或使用 finally 进行一些清理:

try:
do_something()
finally:
cleanup()

关于python - 在 cherrypy 服务中处理 sys.exit(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1002072/

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