我目前在Windows平台上运行一个基于控制台的Python程序。该程序将大部分数据存储在内存中,并定期将数据保存到磁盘,或者当用户通过键盘中断事件(Ctrl + C)关闭应用程序时。
问题在于,当用户点击控制台窗口右上角的“X”按钮时,会话关闭并且内存中的数据会丢失。我正在寻找一种事件/信号或挂钩,以便在关闭之前清理内存。
我希望在不使用任何外部库的情况下完成此操作,但如果不可能,我仍然想知道如何实现。
我希望在不使用任何外部库的情况下完成此操作,但如果不可能,我仍然想知道如何实现。
如果您正在使用pywin32
,您可以在控制台关闭之前执行一个事件。我不确定这是否会告诉您是谁或什么正在关闭它,但也许这能让您走一半路。
您还可以查看:防止控制台应用程序在非现有终端调用时关闭...
def on_exit(signal_type):
print('caught signal:', str(signal_type))
import win32api
win32api.SetConsoleCtrlHandler(on_exit, True)
当你关闭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