如何在一段时间内连续检查小时?

时间:2013-04-17 21:27:02

标签: python loops if-statement while-loop

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

  1. 如果传感器感应到移动,请发送电子邮件并暂停
  2. elif时间范围不在工作时间之间,然后睡到早上9点
  3. 否则睡半秒钟并等待传感器
  4. 到目前为止,第一个条件和最后一个条件都有效。也就是说,如果没有移动,重复睡眠(0.5)直到传感器激活。

    问题:我遇到时间不在9-5之间的中间部分有问题。如果我在9之前或之后运行代码,它将按照预期一直睡到上午9点,但如果代码已经在9-5之间运行(等待移动),则中间条件永远不会触发。它会陷入困境(0.5)。

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

    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"
    

1 个答案:

答案 0 :(得分:1)

你必须更新while循环中的time_elements,以便程序使用条件中的当前时间来测试它是否应该睡到9a.m.否则,如果你没有更新while循环中的time_elements,如果程序第一次没有进入那个条件,它将永远不会进入。

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