ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

利用python 建立windows服务的一点总结

2022-02-18 10:31:19  阅读:221  来源: 互联网

标签:总结 __ 服务 python self windows import logger


最新想通过python写个windows服务 在系统后台处理一些事情,网上查了也写资料,总体看差别不大,都是先pip  install pywin32 这个模块  ,然后新建一个类,写代码,这部分内容参考网上的帖子就可以,这里我要总结的地方是,在按照网上帖子写好服务后 显示碰到了 注册服务不成功的问题,这个问题按照 博客园 的  三只松鼠  这位博主的总结内容解决了,但是注册成功后,在start服务后  服务总是启动不起来,在服务管理里 用手动也启动不起来,后来 注意到在安装服务命令执行后,控制台会给出相关提示

按照这个提示 我把我写的服务py文件放在这个目录   然后在这个目录 运行cmd    再按照服务  启动服务  都没有问题了

我的代码也一并列出来

 1 import logging
 2 import logging.handlers
 3 import datetime
 4 import time
 5 
 6 import win32timezone
 7 import win32serviceutil
 8 import win32service
 9 import win32event
10 
11 
12 class PythonService(win32serviceutil.ServiceFramework):
13     _svc_name_ = "PythonService"  # 服务名称
14     _svc_display_name_ = "Python_Service"  # 在windows services上显示的名字
15     _svc_description_ = "get codesys opcua values"  # 通过opcua获取codesys的数据
16 
17     def __init__(self, args):
18         win32serviceutil.ServiceFramework.__init__(self, args)
19         self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
20         self.logger = self._getLogger()
21         self.runFlag = True
22 
23     def _getLogger(self):
24         logger = logging.getLogger('opc_log')
25         logger.setLevel(logging.DEBUG)
26 
27         rf_handler = logging.handlers.TimedRotatingFileHandler('D:\opc_gpio.log', when='midnight', interval=1,
28                                                                backupCount=7, atTime=datetime.time(0, 0, 0, 0))
29         rf_handler.setFormatter(logging.Formatter("%(asctime)s--%(name)s--%(levelname)s--%(message)s"))
30         logger.addHandler(rf_handler)
31         return logger
32 
33     def SvcDoRun(self):
34         import  time
35         #self.ReportServiceStatus(win32service.SERVICE_START_PENDING)
36         self.logger.info("服务运行了")
37         try:
38             while self.runFlag:
39                 self.logger.info("开始循环了")
40                 time.sleep(10)
41         except Exception as e:
42             self.logger.info(e)
43             time.sleep(60)
44 
45     def SvcStop(self):
46         self.logger.info("服务停止")
47         self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
48         win32event.SetEvent(self.hWaitStop)
49         self.runFlag = False
50 
51 
52 if __name__ == '__main__':
53     win32serviceutil.HandleCommandLine(PythonService)

我这里也抄一部分  三只松鼠  博主的内容  写在这里 给自己做个提示,

3.然后将服务安装到windows
管理员运行cmd,输入如下命令:

复制代码
#安装服务
python Clearjob.py install

#开启服务
python Clearjob.py start

#停止服务
python Clearjob.py stop

#移除服务
python Clearjob.py remove
复制代码

 

异常解决方法

  1.开启服务的时候会出现报错“The service did not respond to the start or control request in a timely fashion”,意思是“服务没有及时响应启动或控制请求”。

 

 2.解决方案:将Python36\Lib\site-packages\win32路径下的pythonservice.exe注册一下。

                   注册命令:pythonservice.exe /register

 

3.这很尴尬。。。缺少pywintypes36.dll。找下,在Python36\Lib\site-packages\pywin32_system32路径。

  解决方法:设置到环境变量或者将此dll copy到Python36\Lib\site-packages\win32。

  注册完后执行python Clearjob.py start

服务运行成功!

标签:总结,__,服务,python,self,windows,import,logger
来源: https://www.cnblogs.com/study-C/p/15907531.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有