如何用Python写一个每天的定时程序

发布时间:2019-08-27 08:06:36编辑:auto阅读(1605)

    1.计算生日是星期几

    当你女朋友要过生日了,你肯定要定找家饭店订个餐庆祝一下,餐馆工作日会空一些,周末位置不好定,要是能知道她的生日是星期几就好了,下面这个程序就能搞定~~

    比如girl friend 的生日假设是 gf_birthday='2017-3-3'

    1).我们先把变量格式化成一个datetime对象

    birthday=datetime.datetime.strptime(gf_birthday,'%Y-%m-%d')

    2).然后利用datetime里面的函数weekday来得到一个下标

    birthday.weekday()

    3).构造一个weekdays的列表,根据下标从列表里面取出是周几

    weekdays=['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']

    weekdays[birthday.weekday()]

    当然你要计算比如情人节,圣诞节什么的都可以用上面的程序,或者整个列表把10年的节日都罗列计算一下都是可以了,是不是很简单,对日期的理解有木有加深了一下下

    2.定时任务

    在Python里面,比如你想定期去爬一个网页,或者做运维的同学想每天12点去定时download一个文件,或者定时去扫描一些服务器,甚至老板的需求不停的变可能是,每隔5分钟,或者每小时的整点10分,每周每月都有一些定时任务

    用Python怎么破很简单,下面这个程序轻松搞定

    我们先从一个最简单的例子说,假设我们是每分种的第10秒,去执行一个任务去打印一下当前的目录

    1).window下是dir命令,linux是ls

    我们用platform这个模块来判断一下操作系统

    import platform

    os_platfrom=platform.platform()

    if os_platfrom.startswith('Darwin'):

    print'this is mac os system'

    os.system('ls')

    elif os_platfrom.startswith('Window'):

    print'this is win system'

    os.system('dir')

    2).如何定时执行

    a.我们先获取当前的时间

    now=datetime.datetime.now()

    假设当前时间是2017-02-09 20:19:47.555000

    b.然后我们输入一个你要定时执行的target时间

    比如你是x分10秒的时候执行sched_Timer=datetime.datetime(x,x,x,x,x,10)

    前面的x是并不重要(只要最后是10秒就行了),我们就把目标时间设的比当前晚一点即可:

    sched_Timer=datetime.datetime(2017,2,9,20,20,10)

    c.好当时间到了20:20:10的时候要运行我们的程序

    如何定时到了呢,很简单用

    if now==sched_Timer:

    'run Task'

    d.那么如何让时间在下一分钟10秒继续执行呢,也很简单用timedelta()

    datetime.timedelta(minutes=1)把target时间往后增加一分钟

    sched_Timer=sched_Timer+datetime.timedelta(minutes=1)

    然后外边用个while 死循环hold住就可以了

    同样的这个代码也可以扩展,把minutes=1改成hours=1就变成了每个小时定时任务,改成days=1就变成每天的定时任务

    作者:菜鸟学python 链接:http://www.jianshu.com/p/ab8d9e576ac4 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
    
    
    
    以下是这篇文章的评论,我觉得还是不错的,也解决上面的问题时间不匹配的问题,特地贴过来来看看
    
    
    按楼主提供的方法尝试了下,楼主提供的一种定时思路是可行的,不过在具体执行过程中“if now==sched_Timer:”这里可能会有点问题。

    在while循环中,datetime.datetime.now()获取的时间是“2017-8-10 17:22:54.123456”这种格式的,而楼主设置的时间格式 print 出来默认是“2017-8-10 17:22:54”,可能是程序运行时间的因素,实际运行过程中判定二者相等,进而执行if内的语句的情况很少出现(我这里尝试了半个下午,没有一次判定二者相等)。

    下面是我自己稍作修改后自行使用的:
    import time

    sched_time = datetime.datetime(2017, 8, 10, 17, 31, 0)
    loopflag = 0
    while True:
    now = datetime.datetime.now()
    if sched_time<now<(sched_time+datetime.timedelta(seconds=1)):
    loopflag = 1
    time.sleep(1)
    if loopflag == 1:
    func() #此处为你自己想定时执行的功能函数
    loopflag = 0

关键字