博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python3编写Windows服务程序
阅读量:5337 次
发布时间:2019-06-15

本文共 2844 字,大约阅读时间需要 9 分钟。

最近做了公司签到的小工具,有同事要求做成Windows服务,开机自启。先说下怎么用Python写Windows服务程序。

1 #encoding=utf-8 2 import win32serviceutil 3 import win32service 4 import win32event 5 import win32timezone 6 import os 7  8 class PythonService(win32serviceutil.ServiceFramework): 9     _svc_name_ = 'PythonService' #服务名称10     _svc_display_name_ = 'regMeal'11     _svc_description_ = '每天晚上6:40后自动签到'12 13 14     def __init__(self,args):15         win32serviceutil.ServiceFramework.__init__(self,args)16         self.hWaitStop = win32event.CreateEvent(None,0,0,None)17         self.logger = self._getLogger()18         self.run = True19 20     def _getLogger(self):21         import inspect22         import logging23         logger = logging.getLogger('[PythonService]')24         this_file = inspect.getfile(inspect.currentframe())25         dirpath = os.path.abspath(os.path.dirname(this_file))26         handler = logging.FileHandler(os.path.join(dirpath,'service.log'))27         formatter = logging.Formatter('%(asctime)s  %(name)-12s %(levelname)-8s %(message)s')28         handler.setFormatter(formatter)29         logger.addHandler(handler)30         logger.setLevel(logging.INFO)31         return logger32 33     def SvcDoRun(self):34         import time35         import readconfig36         import regMeal37         self.logger.info('service is run...')38         while self.run:39             self.logger.info('service is running...')40             paraList = readconfig.readConfig()41             bFlag = regMeal.main(paraList[0],paraList[1],paraList[2])42             time.sleep(2)43 44     def SvcStop(self):45         self.logger.info('service is stop.')46         self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)47         win32event.SetEvent(self.hWaitStop)48         self.run = False49 50 if __name__ == '__main__':51     import sys52     import servicemanager53     if len(sys.argv) == 1:54         try:55             evtsrc_dll = os.path.abspath(servicemanager.__file__)56             servicemanager.PrepareToHostSingle(PythonService)57             servicemanager.Initialize('PythonService',evtsrc_dll)58             servicemanager.StartServiceCtrlDispatcher()59         except win32service.error as details:60             import winerror61             if details == winerror.ERROR_FAILED_SERVICE_CONTROLLER_CONNECT:62                 win32serviceutil.usage()63     else:64         win32serviceutil.HandleCommandLine(PythonService)

推荐大家对比网上其他的人的代码对照看下。SvcDoRun这个函数里面放的就是你实际想做的事情。

安装服务

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

我自己是用pyinstaller打包成exe给别人用的。

PS:脚本编好之后,调试了很久。刚开始会报服务无法启动的问题。具体的排查方式可以看Windows事件查看。

转载于:https://www.cnblogs.com/gig886/p/7240630.html

你可能感兴趣的文章
C语言学习总结(三) 复杂类型
查看>>
HNOI2018
查看>>
【理财】关于理财的网站
查看>>
Ubunt中文乱码
查看>>
《当幸福来敲门》读后
查看>>
【转】系统无法进入睡眠模式解决办法
查看>>
省市县,循环组装,整合大数组
查看>>
stm32中字节对齐问题(__align(n),__packed用法)
查看>>
like tp
查看>>
posix多线程有感--线程高级编程(线程属性函数总结)(代码)
查看>>
DCDC(4.5V to 23V -3.3V)
查看>>
kettle导数到user_用于left join_20160928
查看>>
activity 保存数据
查看>>
typescript深copy和浅copy
查看>>
linux下的静态库与动态库详解
查看>>
hbuilder调底层运用,多张图片上传
查看>>
较快的maven的settings.xml文件
查看>>
Git之初体验 持续更新
查看>>
随手练——HDU 5015 矩阵快速幂
查看>>
Maven之setting.xml配置文件详解
查看>>