我在终端会话中有一个长时间运行的Python脚本(主机是一个FreeBSD盒子),它每9分钟执行一次任务.现在,我希望能够随时中断该睡眠呼叫,以便它立即执行任务.
我怎样才能做到这一点?捕捉Ctrl+ C不是一个选项,因为我需要它来停止程序(而不是仅仅打断睡眠).我可以用终端窗口和键盘做的任何其他事情都可以.
根据托马斯的建议,我想出了这个函数:
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
Run Code Online (Sandbox Code Playgroud)
它等待输入最多几timeout秒钟。
在 Windows 下,我想你可以替换raw_input()为getch()from msvcrt。