我有一个长时间运行的Python脚本在终端会话中(计算机是FreeBSD盒子),每9分钟执行一次任务。现在,我想随时打断睡眠调用,以便立即执行任务。
我该如何做到这一点?捕捉Ctrl + C不是一个选项,因为我需要它停止程序(而不仅仅是中断睡眠)。使用终端窗口和键盘可以做任何其他事情也没有问题。
在Thomas的建议下,我想出了这个函数:
import signal
def input_or_timeout(timeout):
def nothing(sig, frame): pass
signal.signal(signal.SIGALRM, nothing)
signal.alarm(timeout)
try:
raw_input()
signal.alarm(0)
except (IOError, EOFError): pass
该函数等待最多 timeout
秒的输入。
在Windows下,你可以用 msvcrt
包中的 getch()
函数替换 raw_input()
函数。
sleep
。 - zneakSIGALRM
并中断raw_input
或类似的操作,那就可以了。然而,双倍的Ctrl+C会带来自己的问题,我更愿意避免。 - zneak