首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在within循环内连续检查时间?

如何在within循环内连续检查时间?
EN

Stack Overflow用户
提问于 2013-04-17 21:27:01
回答 1查看 3K关注 0票数 2

这是我在Python中的第一篇文章和第一个项目。我试图通过多种条件来控制硬件传感器:

  1. 如果感应器感觉到移动,发送电子邮件和睡眠。
  2. 如果时间范围不在工作时间之间,那就睡到上午9点。
  3. 否则睡上半秒钟然后等传感器

到目前为止,第一个条件和最后一个条件是可行的。也就是说,如果没有运动,重复睡眠(0.5),直到传感器激活。

问题:,我在中间部分遇到麻烦,因为中间的时间不是在9-5之间。如果我在9之前或5之后运行代码,它会按预期的方式在上午9点之前睡觉,但是如果代码已经在9-5之间运行(等待移动),则中间条件永远不会触发。它被困在睡眠中(0.5)。

我没有那么有经验,但我有一个模糊的想法,第二个过程应该有助于跟踪时间。有什么建议吗?这是密码。

代码语言:javascript
复制
def pir_init():
    while True:
        m = datetime.datetime.now().time().minute   #loop through for current time
        h = datetime.datetime.now().time().hour     
        if h < 9:                                           
            print("Sleeping...")
            time_sleep = (9 - h) * 3600
            time.sleep(time_sleep)
        elif h > 16:
            print("Sleeping...")
            time_sleep = ((24 - h) + 9) * 3600
            time.sleep(time_sleep)
        elif io.input(pir_pin):
            print("PIR ALARM")
            send_gmail()   
            time.sleep(10)      #cooldown to prevent email spew
        else:
            print "Waiting..."
            time.sleep(0.5)     #sleep and wait for movement
            print m
    print "Loop End"


# main
if time_elements[0] > '0' and time_elements[0] < '6':  #Weekdays
    if get_hour > 8 and get_hour < 17:             #Hour Range
        pir_init()
    elif get_hour > 16:
        print("Initialization at 9am...")
        time_sleep = ((24 - get_hour) + 9) * 3600
        time.sleep(time_sleep)
        pir_init()              #initiate sensor
    elif get_hour < 9:
        print("Initialization at 9am...")
        time_sleep = (9 - get_hour) * 3600
        time.sleep(time_sleep)
        pir_init()
else:
    #to be completed
    print time_elements[0]
    print "bad weekday"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-17 21:57:14

您必须在while循环中更新time_elements,以便程序在条件下使用当前时间来测试它是否应该睡到上午9点。否则,如果您不更新didn循环中的time_elements,如果程序在第一次没有在这种情况下进入,它将永远不会进入。

这解释了您注意到的行为;事实上,您对time_elements的定义在这里没有显示.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16070546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档