<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        python實現監控windows服務并自動啟動服務示例

        來源:懂視網 責編:小采 時間:2020-11-27 14:38:32
        文檔

        python實現監控windows服務并自動啟動服務示例

        python實現監控windows服務并自動啟動服務示例:使用Python 2.7 + pywin32 + wxpython開發 每隔一段時間檢測一下服務是否停止,如果停止嘗試啟動服務。進行服務停止日志記錄 AppMain.py 代碼如下:#!/usr/bin/env python#-*- encoding:utf-8 -*- 1. 每隔一分鐘檢測一次服務狀態2
        推薦度:
        導讀python實現監控windows服務并自動啟動服務示例:使用Python 2.7 + pywin32 + wxpython開發 每隔一段時間檢測一下服務是否停止,如果停止嘗試啟動服務。進行服務停止日志記錄 AppMain.py 代碼如下:#!/usr/bin/env python#-*- encoding:utf-8 -*- 1. 每隔一分鐘檢測一次服務狀態2

        使用Python 2.7 + pywin32 + wxpython開發

        每隔一段時間檢測一下服務是否停止,如果停止嘗試啟動服務。進行服務停止日志記錄

        AppMain.py

        代碼如下:


        #!/usr/bin/env python
        #-*- encoding:utf-8 -*-

        """
        1. 每隔一分鐘檢測一次服務狀態
        2. 如果發現服務狀態已經停止,那么嘗試啟動服務
        3. 自動記錄日志
        4. 任務欄圖標顯示
        """

        import sys;
        reload(sys);
        sys.setdefaultencoding('utf-8');

        import win32service;
        import logging;
        from logging.handlers import RotatingFileHandler;
        import os.path;
        import wx;
        import AppResource;
        import webbrowser;
        from AppXml import *;

        C_APP_NAME = "Service Moniter 1.0";
        C_LOG_DIR = os.path.altsep.join([os.path.curdir,'service.log']);
        C_CONFIG_PATH = os.path.altsep.join([os.path.curdir,'config.xml']);
        C_LOG_SIZE = 1048576;
        C_LOG_FILES = 3;

        C_APP_SITE = "http://www.du52.com/?app=service_moniter&version=1.0.0";

        class ServiceControl(object):

        def __init__(self):
        self.scm = win32service.OpenSCManager(None,None,win32service.SC_MANAGER_ALL_ACCESS);

        # 檢查服務是否停止
        def isStop(self,name):
        flag = False;
        try:
        handle = win32service.OpenService(self.scm,name,win32service.SC_MANAGER_ALL_ACCESS);
        if handle:
        ret = win32service.QueryServiceStatus(handle);
        flag = ret[1]!=win32service.SERVICE_RUNNING;
        win32service.CloseServiceHandle(handle);
        except Exception,e:
        logging.error(e);
        return flag;

        # 開啟服務
        def start(self,name):
        try:
        handle = win32service.OpenService(self.scm,name,win32service.SC_MANAGER_ALL_ACCESS);
        if handle:
        win32service.StartService(handle,None);
        win32service.CloseServiceHandle(handle);
        except Exception,e:
        logging.error(e);

        # 退出
        def close(self):
        try:
        if self.scm:
        win32service.CloseServiceHandle(self.scm);
        except Exception,e:
        logging.error(e);

        # 初始化日志
        def InitLog():
        logging.getLogger().setLevel(logging.ERROR);
        RtHandler = RotatingFileHandler(filename=C_LOG_DIR,maxBytes=C_LOG_SIZE,backupCount=C_LOG_FILES);
        RtHandler.setLevel(logging.ERROR);
        RtHandler.setFormatter(logging.Formatter('[%(asctime)s][%(levelname)s] %(message)s'));
        logging.getLogger().addHandler(RtHandler);
        logging.error('監控開始執行');

        # 系統托盤圖標
        class TaskIcon(wx.TaskBarIcon):

        def __init__(self):
        wx.TaskBarIcon.__init__(self);
        self.SetIcon(AppResource.TaskIcon.getIcon(),C_APP_NAME);
        self.ID_NAME = wx.NewId();
        self.ID_EXIT = wx.NewId();
        self.ID_AUTHOR = wx.NewId();
        self.Bind(wx.EVT_MENU,self.OnExitEvent,id=self.ID_EXIT);
        self.Bind(wx.EVT_MENU,self.OnHelpEvent,id=self.ID_AUTHOR);

        def OnHelpEvent(self,event):
        webbrowser.open_new(C_APP_SITE);

        def OnExitEvent(self,event):
        wx.Exit();

        def CreatePopupMenu(self,event=None):
        menu = wx.Menu();
        menu.Append(self.ID_NAME,C_APP_NAME);
        menu.AppendSeparator();
        menu.Append(self.ID_AUTHOR,"技術支持");
        menu.Append(self.ID_EXIT,"退出");
        return menu;

        # 隱藏窗口
        class Frame(wx.Frame):

        def __init__(self,timelen,services):
        wx.Frame.__init__(self,parent=None,title=C_APP_NAME);
        self.timelen = timelen*1000;
        self.services = services;
        self.Show(False);
        self.Bind(wx.EVT_TIMER,self.OnTimerEvent);
        self.Bind(wx.EVT_CLOSE,self.OnExitEvent);
        self.timer = wx.Timer(self);
        self.timer.Start(self.timelen);

        def OnTimerEvent(self,event):
        sc = ServiceControl();
        for name in self.services:
        print name;
        if sc.isStop(name):
        logging.error('系統檢測到服務[%s]停止'%(name,));
        sc.start(name);
        sc.close();

        def OnExitEvent(self,event):
        if self.timer:
        self.timer.Stop();
        self.timer = None;

        # 進程
        class Application(wx.App):

        def OnInit(self):
        # 初始化配置
        xml = XmlNode();
        if not xml.LoadFile(C_CONFIG_PATH):
        logging.error('配置文件不存在');
        return False;
        timelen = xml.FindNode('time').GetInt();
        if timelen<=0:
        logging.error('監控間隔時間必須大于0秒');
        return False;
        services = xml.FindNode('services').GetChildrenList(tag='item');
        if len(services)==0:
        logging.error('監控服務列表不能為空');
        return False;
        self.taskbar = TaskIcon();
        self.frame = Frame(timelen,services);
        return True;

        def OnExit(self):
        logging.error('監控停止執行');
        self.frame.Close();
        self.taskbar.RemoveIcon();
        self.taskbar.Destroy();

        if __name__ == '__main__':
        InitLog();
        app = Application();
        app.MainLoop();

        AppXml.py

        代碼如下:


        #!/usr/bin/env python
        #-*- encoding:utf-8 -*-

        """
        XML操作封裝
        """

        import os.path;
        import logging;
        import xml.etree.ElementTree as ElementTree;

        class XmlNodeValue(object):
        STRING = 1;
        INT = 2;
        FLOAT = 3;
        BOOL = 4;

        class XmlNodeMap(object):
        ATTR = 1;
        TEXT = 2;
        NODE = 3;

        class XmlNode(object):

        def __init__(self,currentNode=None,rootNode=None):
        self.currentNode = currentNode;
        self.rootNode = rootNode;

        # 加載XML文件
        def LoadFile(self,path):
        if os.path.isabs(path): path = os.path.abspath(path);
        flag = False;
        try:
        self.rootNode = ElementTree.parse(path);
        if self.rootNode is not None: flag = True;
        self.currentNode = self.rootNode;
        except Exception,e:
        logging.error("XML文件加載失敗");
        logging.error(e.__str__());
        return flag;

        # 加載XML內容
        def LoadString(self,data):
        if data is None or len(data.strip())==0: return False;
        flag = False;
        try:
        self.rootNode = ElementTree.fromstring(data);
        if self.rootNode is not None: flag = True;
        self.currentNode = self.rootNode;
        except Exception,e:
        logging.error("XML內容加載失敗");
        logging.error(e.__str__());
        return flag;

        # 檢查數據是否載入正確
        def IsLoad(self):
        return self.currentNode is not None and self.rootNode is not None;

        # 返回根節點對象
        def GetRoot(self):
        return XmlNode(self.rootNode,self.rootNode);

        # 查找節點,開始為“/”從根節點開始查找,否則從當前節點查找
        def FindNode(self,path):
        if path is None or len(path.strip())==0: return XmlNode(None,self.rootNode);
        path = path.strip();
        node = None;
        if path[0]=='/':
        node = self.rootNode.find(path[1:]);
        else:
        node = self.currentNode.find(path);
        return XmlNode(node,self.rootNode);

        # 查找多節點
        def FindNodes(self,path):
        if path is None or len(path.strip())==0: return XmlNode(None,self.rootNode);
        if path[0]=='/':
        nodes = self.rootNode.findall(path[1:]);
        else:
        nodes = self.currentNode.findall(path);
        return [XmlNode(node,self.rootNode) for node in nodes];

        # 獲取子節點列表
        def GetChildrens(self,tag=None):
        return [XmlNode(node,self.rootNode) for node in self.currentNode.iter(tag=tag)];

        # 格式化數據
        def GetFormatData(self,node,type):
        if type==XmlNodeValue.STRING:
        v = node.GetStr();
        elif type==XmlNodeValue.INT:
        v = node.GetInt();
        elif type==XmlNodeValue.FLOAT:
        v = node.GetFloat();
        elif type==XmlNodeValue.BOOL:
        v = node.GetBool();
        else:
        v = node.GetData();
        return v;

        # 獲取子節點內容列表
        # valueFormat 值類型 1 字符串,2 整數,3 小數,4 布爾值
        def GetChildrenList(self,tag=None,valueFormat=XmlNodeValue.STRING):
        data = [];
        for node in self.GetChildrens(tag=tag):
        data.append(self.GetFormatData(node,valueFormat));
        return data;


        # 獲取子節點Map表
        # keyType 1 使用屬性值 2 使用子節點
        # keyName 屬性值名稱或子節點名稱
        # valueType 1 使用屬性值 2 使用子節點
        # ValueName 屬性值名稱或子節點名稱
        def GetChildrenMap(self,tag=None,keyType=XmlNodeMap.ATTR,keyName="name",valueType=XmlNodeMap.TEXT,valueName=None,valueFormat=XmlNodeValue.STRING):
        data = {};
        for node in self.GetChildrens(tag=tag):
        k,v = None,None;
        if keyType==XmlNodeMap.ATTR:
        if keyName is None or len(keyName.strip())==0: continue;
        k = node.GetAttrs().GetStr(keyName);
        elif keyType==XmlNodeMap.NODE:
        if keyName is None or len(keyName.strip())==0: continue;
        t = node.FindNode(keyName);
        if not t.IsLoad(): continue;
        k = t.GetStr();
        elif keyType==XmlNodeMap.TEXT:
        k = node.GetStr();
        else:
        continue;
        if k is None or len(k.strip())==0: continue;
        if valueType==XmlNodeMap.ATTR:
        if valueName is None or len(valueName.strip())==0: continue;
        v = self.GetFormatData(node.GetAttrs(),valueFormat);
        elif valueType==XmlNodeMap.NODE:
        if valueName is None or len(valueName.strip())==0: continue;
        t = node.FindNode(valueName);
        if t.IsLoad():
        v = self.GetFormatData(t,valueFormat);
        elif valueType==XmlNodeMap.TEXT:
        v = self.GetFormatData(node,valueFormat);
        else:
        v = None;
        data[k] = v;
        return data;

        # 獲取節點名稱
        def GetTag(self):
        if self.currentNode is None: return "";
        return self.currentNode.tag;

        # 獲取節點內容
        def GetData(self,default=None):
        if self.currentNode is None: return default;
        return self.currentNode.text;

        def GetStr(self,default="",strip=True):
        data = self.GetData();
        if data is None: return default;
        try:
        data = str(data.encode("utf-8"));
        if data is None:
        data = default;
        else:
        if strip:
        data = data.strip();
        except Exception,e:
        print e;
        data = default;
        return data;

        def GetInt(self,default=0):
        data = self.GetData();
        if data is None: return default;
        try:
        data = int(data);
        if data is None: data = default;
        except Exception:
        data = default;
        return data;

        def GetFloat(self,default=0.0):
        data = self.GetData();
        if data is None: return default;
        try:
        data = float(data);
        if data is None: data = default;
        except Exception:
        data = default;
        return data;

        def GetBool(self,default=False):
        data = self.GetData();
        if data is None: return default;
        data = False;
        if self.GetStr().lower()=="true" or self.GetInt()==1: data = True;
        return data;

        # 獲取節點屬性
        def GetAttrs(self,default={}):
        return XmlAttr(self);

        class XmlAttr(object):

        def __init__(self,node):
        self.node = node;
        self.InitAttrs();

        # 獲取Node
        def GetNode(self):
        return self.node;

        # 設置Node
        def SetNode(self,node):
        self.node = node;
        self.InitAttrs();

        # 初始化Node屬性列表
        def InitAttrs(self):
        if self.node is None or self.node.currentNode is None:
        self.attrs = {};
        self.attrs = self.node.currentNode.attrib;

        # 獲取屬性
        def GetAttrs(self):
        if self.attrs is None: self.InitAttrs();
        return self.attrs;

        # 獲取指定屬性
        def GetData(self,key,default=None):
        data = self.attrs.get(key);
        if data is None : data = default;
        return data;

        def GetStr(self,key,default="",strip=True):
        data = self.GetData(key);
        if data is None: return default;
        try:
        data = str(data.encode("utf-8"));
        if data is None:
        data = default;
        else:
        if strip:
        data = data.strip();
        except Exception:
        data = default;
        return data;

        def GetInt(self,key,default=0):
        data = self.GetData(key);
        if data is None: return default;
        try:
        data = int(data);
        if data is None: data = default;
        except Exception:
        data = default;
        return data;

        def GetFloat(self,key,default=0.0):
        data = self.GetData(key);
        if data is None: return default;
        try:
        data = float(data);
        if data is None: data = default;
        except Exception:
        data = default;
        return data;

        def GetBool(self,key,default=False):
        data = self.GetData(key);
        if data is None: return default;
        data = False;
        if self.GetStr(key).lower()=="true" or self.GetInt(key)==1: data = True;
        return data;

        # 測試
        if __name__ == "__main__":
        node = XmlNode();
        print node.LoadFile(r"config.xml");
        print node.FindNode("engine/headers").GetChildrenMap("header",XmlNodeMap.ATTR,"name",XmlNodeMap.TEXT,None,XmlNodeValue.STRING);

        AppResource.py

        代碼如下:


        #----------------------------------------------------------------------
        # This file was generated by C:\Python27\Scripts\img2py
        #
        from wx.lib.embeddedimage import PyEmbeddedImage

        TaskIcon = PyEmbeddedImage(
        "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"
        "SUVORK5CYII=")

        config.xml

        代碼如下:






        Dhcp



        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        python實現監控windows服務并自動啟動服務示例

        python實現監控windows服務并自動啟動服務示例:使用Python 2.7 + pywin32 + wxpython開發 每隔一段時間檢測一下服務是否停止,如果停止嘗試啟動服務。進行服務停止日志記錄 AppMain.py 代碼如下:#!/usr/bin/env python#-*- encoding:utf-8 -*- 1. 每隔一分鐘檢測一次服務狀態2
        推薦度:
        標簽: 服務 win 代碼
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲无吗在线视频| 亚洲av日韩av无码av| 草久免费在线观看网站| 国产大片线上免费看| 亚洲偷自拍另类图片二区| 夫妻免费无码V看片| 亚洲精品无码mⅴ在线观看| 免费网站看v片在线香蕉| 亚洲AV日韩AV一区二区三曲 | 亚洲国产成人手机在线观看| 日韩精品成人无码专区免费| 亚洲一级大黄大色毛片| 高清国语自产拍免费视频国产| 亚洲av无码日韩av无码网站冲| 四虎免费永久在线播放| 国产激情久久久久影院老熟女免费 | 亚洲高清无码综合性爱视频| 精品在线免费视频| 国产精品亚洲综合专区片高清久久久 | 凹凸精品视频分类国产品免费 | 国产白丝无码免费视频| 亚洲综合婷婷久久| 女人18毛片特级一级免费视频| 国产精品无码亚洲一区二区三区| 亚洲欧洲日本在线| 日本一道本不卡免费| 亚洲va精品中文字幕| 亚洲福利精品电影在线观看| 三级黄色在线免费观看| 亚洲字幕在线观看| 免费人成视频在线观看不卡| 成人性生交大片免费看好| 亚洲一欧洲中文字幕在线| 亚洲va中文字幕无码| 8x8x华人永久免费视频| 亚洲AV无码专区亚洲AV桃| 亚洲av伊人久久综合密臀性色| 成全影视免费观看大全二| 丝瓜app免费下载网址进入ios | 青青青国产色视频在线观看国产亚洲欧洲国产综合 | a国产成人免费视频|