【问题标题】:Python - How to detect when user closes a console application via "X" buttonPython - 如何检测用户何时通过“X”按钮关闭控制台应用程序
【发布时间】:2011-03-17 03:38:11
【问题描述】:

我目前有一个在 Windows 下运行的基于控制台的 python 程序。程序将大部分数据保存在内存中并定期将数据保存到磁盘,或者当用户通过键盘中断 (Ctrl + C) 事件关闭应用程序时。

我遇到的问题是,当用户点击控制台窗口右上角的“X”按钮时,会话关闭并且内存中的数据丢失。我正在寻找的是一个事件/信号或挂钩,以便我可以在关闭之前清理内存。

我希望在没有任何外部库的情况下做到这一点,但如果这不可能,我仍然想知道如何做到这一点。

【问题讨论】:

  • 我相信监听“X”按钮是特定于平台的。

标签: python console signals application-shutdown


【解决方案1】:

在窗口中

如果您使用pywin32,您可以在控制台关闭之前执行一个事件,我不确定这会告诉您是谁或什么正在关闭它,但也许这会让您半途而废。 您可能还想查看:Prevent a console app from closing ...

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

【讨论】:

  • 如果用户在windows下用“X”按钮关闭窗口,这似乎不起作用。
  • atexit 无法关闭 Windows X
  • 使用 wind32api.SetConsoleCtrlHandler 更新了示例 - 这适用于更广泛的情况,但需要 pywin32
猜你喜欢
  • 1970-01-01
  • 2011-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-25
  • 2012-08-20
  • 2011-08-28
相关资源
最近更新 更多