自各儿写了一个简陋的定时运行,麻烦帮看一下有什么漏洞没

自己写了一个简陋的定时运行,麻烦帮看一下有什么漏洞没?
本帖最后由 evandpr 于 2014-07-25 21:40:31 编辑
菜鸟不会创建守护进程,只好写了一个WHILE循环。


# --> Python3.2
#每天定时在0点30分,6点30分,12点30分,18点30分运行 TEST.PY这个脚本
import time,subprocess

#本地时间.小时
hour = time.localtime()[3]
#本地时间.分钟
mint = time.localtime()[4]
hours = ["00","06","12","18"]
#脚本存放路径
workdir = "D:\脚本"
#脚本名
pyscripts = "test.py"
#python3路径
python3dir = "C:\python.exe"
#循环
while 1:
    for hour in hours:
        # 小时匹配,继续if 分钟是否匹配
        if mint == 30:
            #分钟匹配,执行子脚本,并sleep 60秒,防止重复执行
            subprocess.Popen([python3dir,pyscripts],cwd=workdir)
            time.sleep(60)
        else:
            # 分钟不匹配,sleep 20秒
            time.sleep(20)
    else:
        #小时不匹配,sleep 60秒
        time.sleep(60)

------解决方案--------------------
守护进程网上的daemon很多 拿来可以直接套用
subprocess.Popen([python3dir,pyscripts],cwd=workdir)
这里可以的话  还是尽量打印些日志吧
P = subprocess.Popen(xxx)
P.communicate()
另外 不管windows还是linux都是分时系统 时间不会很精确的 所以sleep这个时间不会很精确 跑几天时间就岔开了
另外  最大的问题是
你这个小时和分钟都是不变的啊
#本地时间.小时
hour = time.localtime()[3]
#本地时间.分钟
mint = time.localtime()[4]
所以你后面再怎么check也没意义了啊
这2个值应该放在while True循环里
------解决方案--------------------

# -*- coding: cp936 -*-
# --> Python3.2
#每天定时在0点30分,6点30分,12点30分,18点30分运行 TEST.PY这个脚本
import time,subprocess
 hours = ["00","06","12","18"]
#脚本存放路径
workdir = "D:\脚本"
#脚本名
pyscripts = "test.py"
#python3路径
python3dir = "C:\python.exe"
#循环
while 1:
    #每次循环都需要重新取时间
    #本地时间.小时
    hour = time.localtime()[3]
    #本地时间.分钟
    mint = time.localtime()[4]
    if hour not in hours:#小时判定也要用if  不是用for, 这里改成小时不匹配便立即返回
        #小时不匹配,sleep 60秒
        time.sleep(60)
        continue
    # 小时匹配,继续if 分钟是否匹配
    if mint == 30:
        #分钟匹配,执行子脚本,并sleep 60秒,防止重复执行
        subprocess.Popen([python3dir,pyscripts],cwd=workdir)
        time.sleep(60)
    else:
        # 分钟不匹配,sleep 20秒
        time.sleep(20)