当当天的日期等于我在变量中设置的日期时,如何运行此代码?



当当前日期等于变量的日期时,我试图发送电子邮件。

import smtplib

import datetime
date = datetime
fromaddr = "holidaysandspecialdates@gmail.com"
toaddrs  = 'noah.s.cha@gmail.com'
msg = input("Enter your message:")

# Credentials (if needed)
username = ''
password = ''
date = 2015-5-24
when datetime.date.today() == date:
    fromaddr = "holidaysandspecialdates@gmail.com"
    toaddrs  = 'noah.s.cha@gmail.com'
    msg = "CodeDay Ends Today!!!"
# The actual mail send
server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()
server.login(username,password)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()
print("Your message:" + "'" + msg + "'" + " has been sent to " + toaddrs + "."  ) 

认为你正在寻找的是一种程序启动的方式,然后等到日期是2015-5-25,然后发出消息。

简单的方法是使用一些外部调度程序- cron, launchd, Scheduled Tasks,或您的操作系统自带的任何程序。只要把它设置成运行你的程序一次,在那天越早越好。(如果你不知道怎么做,你可能会想要AskUbuntu, AskDifferent等,这取决于你在什么平台上。)


如果你真的想在Python中这样做,你可以。你需要的是一种方法,让进入睡眠直到2015-5-25。要做到这一点,可以使用sleep函数。但是你需要知道要睡多少秒。

import datetime
import time
target = datetime.datetime(2015, 5, 25)
time_to_sleep = target - datetime.datetime.now()
time.sleep(time_to_sleep.total_seconds())

请注意,我创建了一个实际的date对象,而不是2015-5-25;只是在你的代码中使用2015-5-25是要求它从2015中减去5,然后从结果中减去25,所以你得到的是整数1986,而不是日期。(另外,我使用datetime而不是date,所以它会一直睡眠到2015-5-25开始,而不是直到一天中的某个任意时间。)

无论如何,这样做的最大问题是你的程序不得不在那里呆上几天,什么都不做。如果有人不小心重新启动你的电脑而没有重新启动程序,它将永远不会做任何事情。您的系统调度程序有办法解决这个问题(系统每次打开时自动重新启动它,并立即检查所有计划的任务,以确保它没有错过任何任务),但您没有(除非您想让这个程序在每次系统打开时都运行,直到时间结束)。还存在各种较小的问题(请参阅J.F. Sebastian的一些注释),您的系统调度器已经知道如何解决这些问题,但它们要么需要更多的工作,要么无法处理。

在Python中比较两个对象时,类型很重要

date = datetimi.date(2015, 5, 24)
if datetime.date.now().date() == date:
    fromeaddr = ""

date()调用将datetime对象限制为其date部分

必须将输入日期变量(字符串)转换为datetime类型

之类的
my_date = raw_input("Give me a date: ")
Give me a date: 24/05/2015
my_date_as_obj = datetime.datetime.strptime(my_date, "%d/%m/%Y")
if datetime.date.today() == my_date_as_obj.date():
   # Date matches. Do something

也参考:日期时间Strftime

相关内容

  • 没有找到相关文章

最新更新