我继承了一个使用 Twisted Python 库的项目。用户从 Windows XP 注销后,应用程序将终止。
Python 代码已使用 bbfreeze 转换为可执行文件。此外,bbfreeze 生成的可执行文件使用 instsrv.exe 和 srvany.exe 注册为 Windows 服务。
我从 Twisted 网站上获取了一个简单的聊天示例,并从 bbfreeze 创建了一个可执行文件,并将其注册到 instsrv 和 srvany,但发生了同样的问题:该可执行文件在用户注销后停止运行。
我倾向于认为 Windows XP 和 Twisted 库的某些原因导致应用程序终止或停止运行。特别是,我认为可能是 react 堆代码中的某些内容导致应用程序代码停止运行。但是,我无法确认这一点。
有没有其他人看到过这个或对可能导致这种情况的原因有任何想法?
谢谢,
标记
最佳答案
从“我也可以用一个简单的聊天示例重现这个”评论来看,Twisted 是罪魁祸首。互联网上的人们确实报告说 Twisted 服务有时会以这种方式失败: Re: SIGBREAK on windows 。
Twisted 有一个内部日志记录工具。使用它的一个例子是对 Twisted starting/stopping factory/protocol less noisy log messages 的回答。如果您使用过它,您就会看到“收到 SIGBREAK...”消息指向根本原因。
顺便说一句,我使用如下代码在我的脚本中记录未处理的异常。如果脚本要在无人看管的情况下运行(或由您诊断问题的其他人 :^) 运行),这总是一个好主意。
# set up logging #####################################
import sys,os,logging
logfile = os.path.splitext(os.path.basename(sys.argv[0]))[0]+".log"
logging.basicConfig(\
format='%(asctime)s %(levelname)-8s %(message)s',\
filename=logfile,\
level=logging.DEBUG)
l = logging.getLogger()
#to avoid multiple copies after restart from pdb prompt
if len(l.handlers)<=1: l.addHandler(logging.StreamHandler(sys.stdout))
#hook to log unhandled exceptions
def excepthook(type,value,traceback):
logging.exception("Unhandled exception occured",exc_info=(type,value,traceback))
old_excepthook(type,value,traceback)
old_excepthook = sys.excepthook
sys.excepthook = excepthook
# ####################################################
关于用户从 Windows XP 注销后,使用 Twisted 的 Python 应用程序停止运行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9674277/