s = signal.signal(signal.SIGINT, signal.SIG_IGN)
os.wait()
signal.signal(signal.SIGINT, s)
目前,我有上面的代码。这对我目前的工作很好,如果有人想要按疯狂的金额Ctrl+c
Python计数键盘中断
但我想有一个任意计数,而不是像上面一样不断忽略它。例如,如果我收到5 Ctrl+c
,我想要sys.exit()
而不是让os.wait()
继续前进。我如何计算ctrl+c
?
s = signal.signal(signal.SIGINT, signal.SIG_IGN)
os.wait()
signal.signal(signal.SIGINT, s)
目前,我有上面的代码。这对我目前的工作很好,如果有人想要按疯狂的金额Ctrl+c
Python计数键盘中断
但我想有一个任意计数,而不是像上面一样不断忽略它。例如,如果我收到5 Ctrl+c
,我想要sys.exit()
而不是让os.wait()
继续前进。我如何计算ctrl+c
?
signal
可以接受函子:
import signal
import sys
class S:
cnt = 0
def __call__(self, signum, frame):
self.cnt += 1
if (self.cnt == 5):
sys.exit()
signal.signal(signal.SIGINT, S())
你显然需要一个变量,你增加和比较五。
编辑:我不认为你能处理的信号,但没能介绍一个Python变量,但哦:
counter = 0
def handle_sigint(signal_number, _frame):
if counter >= 5:
sys.exit(-1) #or whatever you want
else:
counter += 1
signal.signal(signal.SIGINT, handle_sigint)
回溯[错误4]中断的系统调用 (最新最后调用: 文件 “一”,线730,在 os.wait() OSERROR ): 文件 “一”,线730,在 os.wait() OSERROR:[错误4]中断的系统调用 在第二CTRLç –
ealeon
2015-02-06 19:54:41
'os.wait()'(和许多其他的功能阻断)在任何未被忽略的中断上抛出带有errno.EINTR的OSError。你需要检查你的代码。在C语言中,可以使用'SA_RESTART',但是在Python中,这不能完成,因为Python处理信号的方式会使信号处理程序从不调用。 – StenSoft 2015-02-06 20:05:56
也许我应该在它正在等待的过程中放置信号处理程序? – ealeon 2015-02-09 00:46:24