木木的布劳格

  • 首页
  • 学无止尽
  • 愉悦生活
  • 中医
  • 软件
  • 单反摄影
  • 收藏的软件
  • About Me
木木的布劳格
记录生活点滴的静默博客
  1. 首页
  2. Python
  3. 正文

Python 编写Windows服务程序:将Python作为Windows服务启动

7 2 月, 2014 2469点热度 0人点赞 0条评论

Python程序作为Windows服务启动,需要安装pywin32包。下载路径:

http://sourceforge.net/projects/pywin32/files/pywin32/

1

2

import win32serviceutil  
import win32service  
import win32event  
 
class PythonService(win32serviceutil.ServiceFramework):  
    """
    Usage: 'PythonService.py [options] install|update|remove|start [...]|stop|restart [...]|debug [...]'
    Options for 'install' and 'update' commands only:
     --username domain\username : The Username the service is to run under
     --password password : The password for the username
     --startup [manual|auto|disabled|delayed] : How the service starts, default = manual
     --interactive : Allow the service to interact with the desktop.
     --perfmonini file: .ini file to use for registering performance monitor data
     --perfmondll file: .dll file to use when querying the service for
       performance data, default = perfmondata.dll
    Options for 'start' and 'stop' commands only:
     --wait seconds: Wait for the service to actually start or stop.
                     If you specify --wait with the 'stop' option, the service
                     and all dependent services will be stopped, each waiting
                     the specified period.
    """ 
    #服务名 
    _svc_name_ = "PythonService" 
    #服务显示名称 
    _svc_display_name_ = "Python Service Demo" 
    #服务描述 
    _svc_description_ = "Python service demo." 
 
    def __init__(self, args):  
        win32serviceutil.ServiceFramework.__init__(self, args)  
        self.hWaitStop = win32event.CreateEvent(None, 0, 0, None) 
        self.logger = self._getLogger() 
        self.isAlive = True 
         
    def _getLogger(self): 
        import logging 
        import os 
        import inspect 
         
        logger = logging.getLogger('[PythonService]') 
         
        this_file = inspect.getfile(inspect.currentframe()) 
        dirpath = os.path.abspath(os.path.dirname(this_file)) 
        handler = logging.FileHandler(os.path.join(dirpath, "service.log")) 
         
        formatter = logging.Formatter('%(asctime)s %(name)-12s %(levelname)-8s %(message)s') 
        handler.setFormatter(formatter) 
         
        logger.addHandler(handler) 
        logger.setLevel(logging.INFO) 
         
        return logger 
 
    def SvcDoRun(self): 
        import time 
        self.logger.error("svc do run....")  
        while self.isAlive: 
            self.logger.error("I am alive.") 
            time.sleep(1) 
        # 等待服务被停止  
        #win32event.WaitForSingleObject(self.hWaitStop, win32event.INFINITE)  
             
    def SvcStop(self):  
        # 先告诉SCM停止这个过程  
        self.logger.error("svc do stop....") 
        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)  
        # 设置事件  
        win32event.SetEvent(self.hWaitStop)  
        self.isAlive = False 
 
if __name__=='__main__':  
    win32serviceutil.HandleCommandLine(PythonService) 

 

安装服务

python PythonService.py install

让服务自动启动

python PythonService.py --startup auto install

启动服务

python PythonService.py start

重启服务

python PythonService.py restart

停止服务

python PythonService.py stop

删除/卸载服务

python PythonService.py remove

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: python Windows服务启动 Windows服务程序
最后更新:7 2 月, 2014

chat

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复
标签聚合
win10 序列号 CENTOS python PHP wm 激活 c#
广告
分类
  • C sharp
  • Delphi
  • Python
  • VPS
  • 中医
  • 伤寒论
  • 其他
  • 单反摄影
  • 学无止尽
  • 工作相关
  • 愉悦生活
  • 未分类
  • 软件

COPYRIGHT © 2023 木木的布劳格. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang