2016-03-19 7 views
0

Ich möchte, dass ein Python-Skript alle 5 Sekunden einen periodischen Alarm erhält. Ich habe den folgenden Code ausprobiert, aber er empfängt nur einmal den Alarm und hängt dann.Periodischer Signalalarm

import os 
import signal 
import time 

def handler(signum, stack): 
    print 'Alarm: ', time.ctime() 

signal.signal(signal.SIGALRM, handler) 
signal.alarm(5) 
+0

Sie könnten den 'sched' Modul in der Standardbibliothek von Interesse finden. https://docs.python.org/2/library/sched.html – cdarke

Antwort

0

Nichts hängt, nichts empfängt den Alarm einmal. Ihr Programm ist bereits tot, wenn die Alarmglocke das erste Mal klingelt. Versuchen Sie so:

import signal 
import time 

def handler(signum, stack): 
    print 'Alarm: ', time.ctime() 

signal.signal(signal.SIGALRM, handler) 
signal.alarm(5) 
time.sleep(10) 
print "interrupted" 

Wenn Sie es in einer Schleife wollen, nur wickeln Sie es in einer Schleife:

signal.signal(signal.SIGALRM, handler) 
for i in range(1000): 
    signal.alarm(5) 
    time.sleep(10) 
    print "interrupted #%d" % i 

Sie auch Endlosschleife tun können. Aber fangen KeyboardInterrupt in diesem Fall böse Ausnahmen zu vermeiden, wie

Alarm: Sat Mar 19 08:28:06 2016 
interrupted #2 
^CTraceback (most recent call last): 
    File "alaam.py", line 10, in <module> 
    time.sleep(10) 
KeyboardInterrupt 
+0

Danke, es funktioniert gut. – user1530405

+0

Großartig. Fühlen Sie sich frei, die Antwort dann zu akzeptieren;) – flaschbier

0

Da Alarm nur einmal eingestellt ist. Wenn Sie regelmäßig benötigen
Try this:

def handler(signum, stack): 
    print 'Alarm: ', time.ctime() 
    signal.alarm(5)