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

Python程序可以作为Windows服务运行吗?

Barbara Streisand
Barbara Streisand原创
2024-12-02 22:30:11150浏览

Can Python Programs Be Run as Windows Services?

将 Python 脚本作为 Windows 服务运行

管理存储在数据库中的相互关联的对象需要一个为以下对象提供更高级别接口的服务:对这些对象的操作。但是,将 Python 程序作为 Windows 服务运行以实现无需用户登录即可自动执行的问题引起了关注。

是否可以将 Python 程序作为 Windows 服务运行?

是的,可以使用 ActivePython 中包含的或可安装的 pythoncom 库将 Python 程序作为 Windows 服务运行pywin32.

示例实现

简单服务的基本框架:

import win32serviceutil
import win32service
import win32event
import servicemanager

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)

    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)

Windows 服务感知和管理

Windows 通过以下方式识别该服务win32serviceutil.ServiceFramework 和 servicemanager 模块。

您可以使用本机 Windows 实用程序(例如控制面板中的服务小程序)或通过命令行使用以下命令来管理服务:

  • net start servicename
  • net stop 服务名称
  • sc queryex servicename

类似于 /etc/init.d

没有直接等效于将启动/停止脚本放在 /etc/init.d 中视窗。 Windows 服务通常在 Windows 注册表中配置。但是,您可以利用 SystemD 或 Supervisor 等服务控制管理器来实现类似的功能。

以上是Python程序可以作为Windows服务运行吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

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