将 Python 脚本作为 Windows 服务运行
在使用 Python 开发基于服务的系统的背景下,出现的问题是这是否可能将 Python 脚本作为 Windows 服务运行。本文解决了这个问题并提供了全面的答案。
事实上,利用 ActivePython 中包含的 pythoncom 库或通过 pywin32 扩展将 Python 程序托管为 Windows 服务是可行的。为了说明此过程,请考虑以下基本服务的代码框架:
import win32serviceutil import win32service import win32event import servicemanager import socket class AppServerSvc (win32serviceutil.ServiceFramework): _svc_name_ = "TestService" _svc_display_name_ = "Test Service" def __init__(self,args): win32serviceutil.ServiceFramework.__init__(self,args) self.hWaitStop = win32event.CreateEvent(None,0,0,None) socket.setdefaulttimeout(60) def SvcStop(self): self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) win32event.SetEvent(self.hWaitStop) def SvcDoRun(self): servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE, servicemanager.PYS_SERVICE_STARTED, (self._svc_name_,'')) self.main() def main(self): pass if __name__ == '__main__': win32serviceutil.HandleCommandLine(AppServerSvc)
将自定义代码插入 main() 函数,通常部署一个无限循环,可以通过监视中设置的标志来中断该循环SvcStop 方法。
此外,Windows 会通过服务管理器警告您的服务的存在。您可以使用本机 Windows 实用程序(例如服务控制台 (services.msc) 或 sc 命令行工具)监视和管理它。与 Unix 中用于启动/停止脚本的 /etc/init.d 目录类似,Windows 使用 scm(服务控制管理器)来管理服务。利用 sc 实用程序,您可以对服务执行各种操作,包括创建、启动、停止和配置它们。
以上是Python 脚本可以作为 Windows 服务运行吗?的详细内容。更多信息请关注PHP中文网其他相关文章!