如何在Python中捕获SIGINT信号?

如何在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步:创建函数

我们现在创建一个函数,当发生键盘中断时,它将被调用并接受任何两个参数。在这种情况下,已将参数设置为 sigframe

# 创建一个函数,它接受两个参数,当用户发生键盘中断时调用
def signalHandling(signal, frame):

第3步:定义自定义处理程序

在这里,我们使用signal.signal()函数定义必须在接收到信号时调用的自定义处理程序。此外,我们定义了signal.SIGINT,它会通过键盘输入 Ctrl+CCtrl+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关键字导入 signalsys 模块。

  • 使用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和键盘中断等异常。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程