首先创建一个 test.py 文件

import time


a = 0
while True:
    a += 1
    print(a)
    time.sleep(1)

 

然后创建 script_detection.py 文件检测 test.py 脚本运行状态,如果中断,则重启 test.py

 

#!/usr/bin/python
# -*- coding:utf-8 -*-
import subprocess,time,sys


TIME = 3                        #程序状态检测间隔(单位:秒)
CMD = "test.py"                 #需要执行程序的路径,支持jar,或绝对路径 如:r"D:\\calc.exe" 或者r"D:\\test.jar"


class Auto_Run():
    def __init__(self,sleep_time,cmd):
        self.sleep_time = sleep_time
        self.cmd = cmd
        self.ext = (cmd[-3:]).lower()        #判断文件的后缀名,全部换成小写
        self.p = None                        #self.p为subprocess.Popen()的返回值,初始化为None
        self.run()                           #启动时先执行一次程序
        try:
            while 1:
                time.sleep(sleep_time)  #休息 sleep_time 秒,再判断程序状态
                self.poll = self.p.poll()    #判断程序进程是否存在,None:表示程序正在运行 其他值:表示程序已退出
                if self.poll is None:
                    print("运行正常")
                else:
                    print("未检测到程序运行状态,准备启动程序")
                    self.run()
        except KeyboardInterrupt as e:
            print("检测到CTRL+C,准备退出程序!")
#            self.p.kill()                   #检测到CTRL+C时,kill掉CMD中启动的exe或者jar程序
    def run(self):
        if self.ext == ".py":
            print('start OK!')
            self.p = subprocess.Popen(['python','%s' % self.cmd], stdin = sys.stdin,stdout = sys.stdout, stderr = sys.stderr, shell = False)
        else:
            pass
app = Auto_Run(TIME,CMD)

 

 

运行结果如下:

 

start OK!
1
2
3
运行正常
4
5
6
运行正常
7
8
9
运行正常

 


0 条评论

发表评论

邮箱地址不会被公开。 必填项已用*标注