Python - 如何检测用户通过“X”按钮关闭控制台应用程序

6 投票
1 回答
9756 浏览
提问于 2025-04-16 13:52

我现在有一个在Windows上运行的基于控制台的Python程序。这个程序大部分数据都保存在内存中,并且会定期把数据保存到硬盘上,或者当用户通过键盘中断(按下Ctrl + C)来关闭应用程序时。

我遇到的问题是,当用户点击控制台窗口右上角的“X”按钮时,程序会直接关闭,这样内存中的数据就会丢失。我想要找到一种事件、信号或者钩子,这样我就可以在关闭程序之前清理内存。

我希望能在不使用任何外部库的情况下做到这一点,不过如果不行,我也想知道怎么做。

1 个回答

7

在Windows系统中

如果你在使用 pywin32,你可以在控制台关闭之前执行一个事件。我不确定这能否告诉你是谁或者是什么在关闭它,但这可能能帮你解决一部分问题。你也可以看看这个链接: 防止控制台应用关闭...

def on_exit(signal_type):
   print('caught signal:', str(signal_type))

import win32api
win32api.SetConsoleCtrlHandler(on_exit, True)

对于使用Linux的朋友...

当你关闭SSH会话或窗口时,会发送一个叫做SIGHUP的信号(信号挂起)。

import signal

signal.signal( signal.SIGHUP, handler )

def handler(signum, frame):
  #this is called when the terminal session is closed
  #do logic before program closes
  pass

撰写回答