如何在Python中捕获SIGINT信号?
在本文中,我们将学习如何在Python中捕获SIGINT信号以及在捕获信号后需要执行哪些操作。
当signal模块接收到信号时,它会执行特定的操作。除此之外,它还可以通过使用SIGINT捕获用户在键盘上的中断。
所需模块
Signal模块
术语“signal”是指程序可以从操作系统接收信息的过程。此外,当操作系统检测到特定事件时,信号被发送到程序中。通过在终端上执行以下命令,可以安装signal模块 –
pip install signal
Sys模块
Python中的sys模块提供了多个函数和变量以更改Python运行环境的不同部分。可以使用以下命令安装sys模块 –
pip install os-sys
Time模块
Python的time模块使用户能够使用时间并记录与时间相关的信息。time模块通常预安装在Python中,因此无需安装它;但是,如果没有安装它,则可以使用以下命令安装它 –
pip install python-time
现在,我们将逐步实现在Python中捕获SIGINT的方法。
逐步实现
第1步:导入库
首先,我们必须使用 import 关键字导入所有必需的库。其中包括signal、sys和sleep库。
# 导入signal和sys模块
import signal
import sys
# 从time模块导入sleep函数
from time import sleep
第2步:创建函数
我们现在创建一个函数,当发生键盘中断时,它将被调用并接受任何两个参数。在这种情况下,已将参数设置为 sig 和 frame 。
# 创建一个函数,它接受两个参数,当用户发生键盘中断时调用
def signalHandling(signal, frame):
第3步:定义自定义处理程序
在这里,我们使用signal.signal()函数定义必须在接收到信号时调用的自定义处理程序。此外,我们定义了signal.SIGINT,它会通过键盘输入 Ctrl+C 或 Ctrl+F2 引起中断。
signal.signal(signal.SIGINT, signalHandling)
第4步:打印随机消息
接下来,打印任意随机消息,并为用户提供一些提示,以便在发生键盘中断时知道该怎么做。
# 打印随机消息
print(' printing random messages')
第5步:设置休眠时间
最后,为Python设置随机秒数的休眠时间。
# 休眠时间
sleep(time in sec)
注意事项
该程序有一个注意事项:如果您在Windows上运行它,您可以通过按 Ctrl和F2 停止它并捕获SIGINT信号,但如果您在Linux上运行它,则可以通过同时按 Ctrl和C 来停止它。
在Python中捕获SIGINT信号
算法(步骤)
以下是执行所需任务的算法/步骤。
-
使用import关键字导入 signal 和 sys 模块。
-
使用import关键字从time模块中导入 sleep 函数。
-
创建一个变量并将其值初始化为1(用于表示循环执行的次数)。
-
使用 while True 循环无限次数。
-
使用try-except块来处理错误/异常。
-
通过打印上述变量来打印循环执行次数的计数。
-
使用 sleep() 函数按顺序输出每个数字之间的随机秒数,将该数字作为参数传递给它。
-
将循环执行计数值增加1。
-
使用 except 块来处理键盘中断异常。
-
如果键盘中断异常发生,则打印任何消息。
-
使用sys模块的 exit() 函数关闭/退出程序。
示例
以下程序使用try/catch异常来捕获SIGINT −
# 导入signal和sys模块
import signal
import sys
# 从time模块中导入sleep函数
from time import sleep
# 将变量初始化为1以计数循环执行的次数
k = 1
# 使用while循环无限次数
while True:
# 使用try-except块处理错误/异常
try:
# 打印循环执行次数的计数
print(k)
# 每次打印数字之间随机休眠一段时间
sleep(0.5)
# 将循环执行计数增加1
k += 1
# 使用except块处理键盘中断异常
except KeyboardInterrupt:
# 打印任何消息,如果键盘中断异常发生
print("循环已停止!!")
# 关闭/退出程序
sys.exit()
输出
执行上述程序后,将生成以下输出 −
1
2
3
4
5
6
7
8
9
10
11
12
13
循环已停止!!
在此程序中,我们使用try-catch语句处理键盘异常。在try块中运行不断增加数字的循环时,在catch块中捕获键盘中断。
结论
在本文中,我们学习了如何使用Python捕获SIGINT。我们学习了如何使用try/catch语句实现相同的功能。可以使用try和catch语句来处理除以0和键盘中断等异常。