2016-03-19 19 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 

あなたはまた、無限ループを行うことができます。しかし、アラームが一度だけ設定されているため

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

のような厄介な例外を回避するために、この場合にKeyboardInterruptをキャッチ。あなたが定期的に必要な場合
はこれを試してみてください:

def handler(signum, stack): 
    print 'Alarm: ', time.ctime() 
    signal.alarm(5) 
関連する問題