如何在 Python 中捕获 SIGINT?

pythonserver side programmingprogramming更新于 2024/1/7 14:23:00

在本文中,我们将学习如何在 Python 中捕获 SIGINT 以及捕获后要做什么。

当信号模块接收到信号时,它会执行某些操作。除此之外,它还可以使用 SIGINT 通过键盘捕获用户的中断。

所需模块

信号模块

术语"信号"是指程序可以从操作系统接收信息的过程。此外,当操作系统检测到特定事件时,信号会发送给程序。通过在终端执行以下命令,可以安装信号模块 -

pip install signal

Sys 模块

Python 中的 sys 模块提供了几个函数和变量来改变 Python 运行环境的不同部分。可以使用以下命令安装 sys 模块 -

pip install os-sys

时间模块

Python 的时间模块使用户能够处理时间并记录有关时间的信息。时间模块通常随 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(' 打印随机消息')

步骤 5:设置睡眠时间

最后,将 Python 睡眠时间设置为随机秒数。

# 睡眠时间
睡眠(时间秒)

注意

该程序有一个问题:如果您在 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 −

# 导入信号和系统模块
import signal
import sys
# 从时间模块导入睡眠函数
from time import sleep
# 用值 1 初始化变量以计算循环执行的次数
k = 1
# 使用 while 循环无限次循环
while正确:
   # 使用 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
The loop has stopped!!

在此程序中,我们使用 try-catch 语句来处理键盘异常。在 try 块中运行数字递增循环时,我们在 catch 块中捕获了键盘中断。

结论

在本文中,我们学习了如何使用 Python 捕获 SIGINT。我们学习了如何使用 try/catch 语句来实现相同的目的。Try 和 catch 语句可用于处理除以 0 和键盘中断等异常。


相关文章