你的逻辑错了。在
首先,while循环很可能在第一次迭代中结束,您希望程序继续运行,直到您告诉它为止。在
除此之外,不更新循环中的now变量,这基本上是个坏主意。在
例如,此代码将继续运行,当它是15:33时,一个声音只会播放一次。在myHour = 15
myMin = 33
is_played = False
while True:
now = datetime.now()
currentHour = now.hour
currentMin = now.minute
if currentHour == myHour and currentMin == myMin and not is_played:
is_played = True
os.system("aplay /home/pi/sound.wav")
if currentHour != myHour or currentMin != myMin:
is_played = False
Xiaotian Pei提出了一个好主意,为了有效地使用CPU资源,让我们使用Timer模块:
^{pr2}$
import datetime
import subprocess
while True:
now = datetime.now()
# compute `deadline`
while True:
deadline = now.replace(hour=hour, minute=min)
if deadline > now:
break
else:
deadline += datetime.timedelta(1)
sleep_until(deadline) # sleep
subprocess.check_call(['aplay', '/home/pi/sound.wav']) # play the sound!
阅读sleep_until是如何实现的here。在