Python 捕捉 ctrl+c 事件的方法

本篇 ShengYu 介紹 Python 捕捉 ctrl+c 事件的方法,

在 Python 要捕捉 ctrl+c 事件的話可以向作業系統註冊 SIGINT 的 handler,當程式發生 SIGINT 的訊號時,就會執行先前註冊的 handler,Python 註冊 signal 是使用 signal.signal() 函式,使用之前要先 import signal 模組,signal.signal() 註冊 SIGINT 的用法如下,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import signal
import sys
import time

def signal_handler(signum, frame):
print('signal_handler: caught signal ' + str(signum))
if signum == signal.SIGINT.value:
print('SIGINT')
sys.exit(1)

signal.signal(signal.SIGINT, signal_handler)
print(signal.SIGINT)
while True:
time.sleep(1)

輸出如下,按下 ctrl+c 後會看到 ^C 字樣,接著就進入到我們定義的 signal_handler 函式裡,然後判斷是 SIGINT 就離開程式,

1
2
3
Signals.SIGINT
^Csignal_handler: caught signal 2
SIGINT

其它參考
signal — Set handlers for asynchronous events — Python 3 documentation
https://docs.python.org/3/library/signal.html
controls - How do I capture SIGINT in Python? - Stack Overflow
https://stackoverflow.com/questions/1112343/how-do-i-capture-sigint-in-python
Get signal names from numbers in Python - Stack Overflow
https://stackoverflow.com/questions/2549939/get-signal-names-from-numbers-in-python/35996948

其它相關文章推薦
C/C++ 捕捉 ctrl+c 事件的 2 種方法
Python 新手入門教學懶人包