python怎么操作windows服务?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python怎么操作windows服务?相关的知识,希望对你有一定的参考价值。
我有个程序,必须不间断运行,它是以windows服务形式启动的,但是有时候会自动停掉,我要做的是,用python写个程序,每隔一段时间检查一下这个服务是否启动,如果那个服务没有启动,就启动它。
你可以使用 pythoncom 库,它包含ActivePython 或者可以安装pywin32 (Python for Windows extensions).
下面是一个简单操作服务的例子:
import pythoncomimport 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)
你的代码需要放在mian()方法里面,通常会有一些情况通过检查你在 SvcStop 方法中设置的标志,然后中断循环
参考技术A 安装第三方扩展pywin32-214.win32-py2.5.exe就可以操作 win下的程序来
比如ie浏览器 等。。。 参考技术B 在windows中操作服务,可以使用os模块
查询一个服务状态的命令为:
sc query [servicename]
如查询WebClient服务状态:
C:\Documents and Settings\Administrator>sc query WebClient
SERVICE_NAME: WebClient
TYPE : 10 WIN32_OWN_PROCESS
STATE : 4 RUNNING
(STOPPABLE,NOT_PAUSABLE,ACCEPTS_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
于是我们这个python脚本的切入点可以先查询某服务的状态,如果状态不是RUNNING的话,就启动它,关键代码如下:
result = os.popen("sc query WebClient")
if not "RUNNING" in result:
os.system("sc start WebClient")
让这个脚本定时运行即可,希望能帮助到你本回答被提问者采纳 参考技术C 1、安装pywin32:http://pypi.python.org/pypi/pywin32/210
2、参考文章:http://www.room702.cn/index.php/archives/419
以上是关于python怎么操作windows服务?的主要内容,如果未能解决你的问题,请参考以下文章