2016-03-19 3 views
0

Я бы хотел, чтобы мой скрипт Python получал периодический сигнал тревоги каждые 5 секунд. Я пробовал следующий код, но он только получает сигнал тревоги, а затем зависает.Сигнал периодического сигнала

import os 
import signal 
import time 

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

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

Вы можете найти 'модуль sched' в стандартной библиотеке интерес. https://docs.python.org/2/library/sched.html – cdarke

ответ

0

Ничего не висит, ничто не получает сигнал тревоги один раз. Ваша программа уже мертва, когда звонок звонит в первый раз. Попробуйте так:

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" 

Если вы хотите в цикле, просто обернуть его в петлю:

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

Вы также можете сделать бесконечный цикл. Но поймать KeyboardInterrupt в этом случае, чтобы избежать неприятных исключений, как

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

Спасибо, все работает отлично. – user1530405

+0

Отлично. Не стесняйтесь принять ответ тогда;) – flaschbier

0

Поскольку сигнал устанавливается только один раз. Если вам нужна периодическая
Попробуйте это:

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