Despertador de python

He hecho este pequeño despertador con la ayuda de mi hermano. Lo intenté anoche, sin el nonBlockingRawInput y funcionó bien, pero con el nonBlockingRawInput no funcionó. Hoy lo he probado pero ninguno de ellos funciona! Publicaré el código con el nonBlockingRawInput y el archivo “non”. Si desea el código sin nonBlockingRawInput , solo pregunte.

Gracias por adelantado.

alarma rpi.py :

 import time import os from non import nonBlockingRawInput name = input("Enter your name.") print("Hello, " + name) alarm_HH = input("Enter the hour you want to wake up at") alarm_MM = input("Enter the minute you want to wake up at") print("You want to wake up at " + alarm_HH + ":" + alarm_MM) while True: now = time.localtime() if now.tm_hour == int(alarm_HH) and now.tm_min == int(alarm_MM): print("ALARM NOW!") os.popen("open mpg321 /home/pi/voltage.mp3") break else: print("no alarm") timeout = 60 - now.tm_sec if nonBlockingRawInput('', timeout) == 'stop': break 

no.py :

 import signal class AlarmException(Exception): pass def alarmHandler(signum, frame): raise AlarmException def nonBlockingRawInput(prompt='', timeout=20): signal.signal(signal.SIGALRM, alarmHandler) signal.alarm(timeout) try: text = input(prompt) signal.alarm(0) return text except AlarmException: pass signal.signal(signal.SIGALRM, signal.SIG_IGN) return '' 

    He estado mirando su código por un tiempo ahora. Por lo que puedo entender, usted desea poder ejecutar una alarma y al mismo tiempo escribir “detener” en el shell para finalizar el progtwig, con este fin puede hacer que la alarma sea un hilo. El hilo comprobará si es el momento de decir “¡ALARMA!” y abre el mp3. Si el usuario no ha tecleado, deténgase en el shell, el hilo se pondrá en espera y lo comprobará más tarde.

    Básicamente, utilicé su código y lo puse en una clase de hilo de alarma:

     import time import os import threading class Alarm(threading.Thread): def __init__(self, hours, minutes): super(Alarm, self).__init__() self.hours = int(hours) self.minutes = int(minutes) self.keep_running = True def run(self): try: while self.keep_running: now = time.localtime() if (now.tm_hour == self.hours and now.tm_min == self.minutes): print("ALARM NOW!") os.popen("voltage.mp3") return time.sleep(60) except: return def just_die(self): self.keep_running = False name = raw_input("Enter your name: ") print("Hello, " + name) alarm_HH = input("Enter the hour you want to wake up at: ") alarm_MM = input("Enter the minute you want to wake up at: ") print("You want to wake up at: {0:02}:{1:02}").format(alarm_HH, alarm_MM) alarm = Alarm(alarm_HH, alarm_MM) alarm.start() try: while True: text = str(raw_input()) if text == "stop": alarm.just_die() break except: print("Yikes lets get out of here") alarm.just_die() 

    Vale la pena señalar, que cuando el hilo está durmiendo, con:

     time.sleep(60) 

    Y escribiste “stop” en el shell, el hilo tendría que despertarse antes de darse cuenta de que estaba muerto, ¡así que en el peor de los casos podrías esperar un minuto para que se cierre el progtwig!

     import winsound,time a= int(input("Enter how many times I have beep :")) b= int(input("Enter when to wake up (in seconds) :")) time.sleep(b) for i in range(a): winsound.Beep(3000,100) winsound.Beep(2500,100) winsound.Beep(2000,100) winsound.Beep(1000,100) winsound.Beep(500,100)