使用Twisted的Python应用程序在用户注销Windows XP后停止运行

时间:2012-03-12 20:25:47

标签: python windows-services twisted

我使用Twisted Python库继承了一个项目。用户从Windows XP注销后,应用程序将终止。

Python代码已使用bbfreeze转换为可执行文件。此外,使用instsrv.exe和srvany.exe将bbfreeze生成的可执行文件注册为Windows服务。

我从Twisted网站上做了一个简单的聊天示例,并从bbfreeze创建了一个可执行文件,并将其注册到instsrv和srvany,同样的问题出现了:用户注销后,可执行文件停止运行。

我倾向于认为Windows XP和Twisted库的某些内容导致应用程序终止或停止运行。特别是,我认为反应堆代码中可能存在导致应用程序代码停止运行的问题。但是,我无法证实这一点。

有没有其他人看过这个或对可能导致这种情况的任何想法?

谢谢, 标记

1 个答案:

答案 0 :(得分:2)

通过" 判断我还可以通过一个简单的聊天样本重现这个"评论,扭曲是罪魁祸首。互联网上的人确实报告Twisted服务有时会以这种方式失败:Re: SIGBREAK on windows

Twisted有一个内部日志工具。使用它的一个例子是Twisted starting/stopping factory/protocol less noisy log messages的答案。如果你使用它,你就已经看到" 收到了SIGBREAK ... "消息指向根本原因。


BTW,我使用下面的代码在我的脚本中记录未处理的异常。如果要在无人看管的情况下运行脚本(或者您诊断问题的其他人:^),这总是一个好主意。

# 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
# ####################################################