You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中处理Windows Terminal的关闭事件

解答

可以实现。Windows系统下点击终端窗口右上角的关闭按钮时,系统会向终端内运行的所有进程发送CTRL_CLOSE_EVENT控制信号,你可以为Python脚本绑定该信号的回调函数,执行自定义的资源释放、数据保存等收尾逻辑。

方案1:使用pywin32实现

前置依赖

先安装pywin32库:
pip install pywin32

示例代码

import win32api
import win32con
import time

def terminal_close_handler(event):
    if event == win32con.CTRL_CLOSE_EVENT:
        # 此处填写你需要执行的收尾逻辑
        print("检测到终端窗口关闭,执行收尾操作...")
        # 注意:Windows仅给回调预留最多5秒执行时间,超时会直接杀死进程
        time.sleep(2)
        print("收尾操作完成")
        return True
    return False

# 绑定回调函数
win32api.SetConsoleCtrlHandler(terminal_close_handler, True)

# 模拟业务逻辑
if __name__ == "__main__":
    print("脚本运行中,点击窗口关闭按钮可测试回调")
    while True:
        time.sleep(1)

方案2:无第三方依赖实现(使用ctypes)

如果不想安装额外库,可以直接通过Python标准库ctypes调用Windows系统API实现:

import ctypes
import time

# 定义回调函数类型与关闭事件常量
HandlerRoutine = ctypes.WINFUNCTYPE(ctypes.c_bool, ctypes.c_uint)
CTRL_CLOSE_EVENT = 2

def terminal_close_handler(event):
    if event == CTRL_CLOSE_EVENT:
        print("检测到终端窗口关闭,执行收尾操作...")
        time.sleep(2)
        print("收尾操作完成")
        return True
    return False

# 绑定回调函数
kernel32 = ctypes.WinDLL('kernel32', use_last_error=True)
kernel32.SetConsoleCtrlHandler(HandlerRoutine(terminal_close_handler), True)

# 模拟业务逻辑
if __name__ == "__main__":
    print("脚本运行中,点击窗口关闭按钮可测试回调")
    while True:
        time.sleep(1)

注意事项

  • 回调函数的最长执行时间被Windows限制为5秒,超过时长进程会被系统强制杀死,不要在回调中加入耗时过长的逻辑
  • 关闭Windows Terminal的单个标签页也会触发该回调,和点击窗口关闭按钮的表现一致
  • 该方案仅适配Windows平台,如需跨Linux/macOS使用,需要额外绑定SIGTERM、SIGHUP等信号的处理逻辑

内容的提问来源于stack exchange,提问作者hescul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 01:18:02