首页 >后端开发 >Python教程 >Python 脚本可以作为 Windows 服务运行吗?

Python 脚本可以作为 Windows 服务运行吗?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-04 09:44:14201浏览

Can Python Scripts Be Run as Windows Services?

将 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn