zoukankan      html  css  js  c++  java
  • Windows 下针对python脚本做一个简单的进程保护

    前提:

      大家运行的脚本程序经常会碰到系统异常关闭、或被其他用户错杀的情况。这样就需要一个进程保护的工具。

      本文结合windows 的计划任务,实现一个简单的进程保护的功能。

    1. 利用py2exe生产 exe 文件.

        py2exe是一个将python脚本转换成windows上的可独立执行的可执行程序(*.exe)的工具,这样,你就可以不用装python而在windows系统上运行这个可执行程序.

        下载地址:从http://prdownloads.sourceforge.net/py2exe

                创建py2exehelper.py文件 具体代码如下:

    __author__ = 'Bruce_Zhou'
    from distutils.core import setup
    import py2exe
    setup(console=['uniquetest.py'],)
    View Code

                创建 uniquetest.py 代码如下:

    __author__ = 'Bruce_Zhou'
    
    import threading
    import time
    import urllib2
    import os
    
    
    class CountDownTimer(threading.Thread):
            def __init__(self, seconds, action):
                self.runTime = seconds
                self.action = action
                super(CountDownTimer, self).__init__()
    
            def run(self):
                counter = self.runTime
                for sec in range(self.runTime):
                        print counter
                        time.sleep(1.0)
                        counter -= 1
                print " Time's up"
                self.action()
    
    
    def dosomethine():
        print "I'm ready"
        t = CountDownTimer(1800, dosomethine)
        t.start()
    
    if __name__ == "__main__":
    
        t = CountDownTimer(10, dosomethine)
        t.start()
    View Code

               

           将py2exehelper.py 和uniquetest.py 放在同一目录。

           进入py2exehelper.py文件所在目录。

           执行命令: python py2exehelper.py py2exe。

           会在目录中创建两个文件夹”bulid” 和 “dist”。你可以在dist 目录中找到你需要的exe 文件。

       

         2.利用计划任务定时检测EXE是否运行。

              创建checkexe.py脚本用于检测进程是否存在,如果不存在则开启一个新的,如果存在则什么都不做。

              你可以设定计划任务每隔多长时间久去执行下这个脚本,这样就可以保证EXE始终保持运行。

          代码如下:

             

    import wmi
    import subprocess
    import os
    from win32com.client import Dispatch
    c = wmi.WMI()
    
    def checkexe():
        for process in c.Win32_Process():
           if process.Name == "uniquetest.exe":
               return True
        return False
    
    
    if __name__ == "__main__":
        print checkexe()
        if not checkexe():
            subprocess.Popen([r'C:UsersBruce_ZhouDesktop2exedistuniquetest.exe'])
    View Code

             

       其中WMI模块获取Windows系统的硬件信息:硬盘分区、使用情况,内存大小,CPU型号,当前运行的进程,自启动程序及位置,系统的版本等信息。

         下载地址:https://pypi.python.org/pypi/WMI/

  • 相关阅读:
    C#委托及事件 详解(讲得比较透彻)
    浅谈前端常用脚手架cli工具及案例
    C++实现二分法详解
    重新整理 .net core 实践篇————重定向攻击[三十九]
    动态规划_备忘录法_矩阵链乘问题
    完了,又火一个项目
    DOM常用的属性和方法
    一些胡乱的吐槽
    Mac安装compass失败的原因
    css动画animation-keyframes
  • 原文地址:https://www.cnblogs.com/zj1111184556/p/4708383.html
Copyright © 2011-2022 走看看