如何在 Python 中捕获 SIGINT?
在本文中,我们将学习如何在 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:创建函数
我们现在创建一个函数,如果发生键盘中断,它将通过接受任意两个参数来调用。在这种情况下,参数被视为 sig 和 frame。
# 创建一个接受两个参数的函数 # 当用户进行键盘中断时,它会被调用 def signalHandling(signal, frame):
步骤 3:定义自定义处理程序
在这里我们使用 signal.signal() 函数来定义在收到信号时必须调用的自定义处理程序。此外,我们定义了 signal.SIGINT,通过在键盘上键入 Ctrl+C 或 Ctrl+F2 来引起中断。
signal.signal(signal.SIGINT, signalHandling)
步骤 4:打印随机消息
接下来,打印几行随机消息,让用户知道如果键盘中断该怎么做。
# 打印随机消息 print(' 打印随机消息')
步骤 5:设置睡眠时间
最后,将 Python 睡眠时间设置为随机秒数。
# 睡眠时间 睡眠(时间秒)
注意
该程序有一个问题:如果您在 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 −
# 导入信号和系统模块 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 和键盘中断等异常。