定期信号报警

时间:2016-03-19 07:00:06

标签: python signals alarm

我希望我的Python脚本能够每隔5秒接收一次定期警报。我已经尝试了以下代码,但它只接收一次警报然后挂起。

import os
import signal
import time

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

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

2 个答案:

答案 0 :(得分:1)

什么都没有挂起,没有人收到警报一次。当闹钟第一次响铃时,你的程序已经死了。试试这样:

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

答案 1 :(得分:0)

因为警报只设置一次。如果你需要定期
试试这个:

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