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

Blender脚本中捕获Ctrl+C执行清理后仅终止脚本而非退出Blender

Blender脚本捕获Ctrl+C仅终止脚本不退出软件的解决方案

问题分析

你原来用sys.exit(0)会直接退出Blender,是因为Blender的Python解释器和独立Python环境不同——sys.exit()在这里会终止整个Blender进程,而不是仅停止当前脚本。正确的做法是还原Ctrl+C的默认行为:抛出KeyboardInterrupt异常,同时在异常触发前执行清理逻辑。

修正代码

import signal

def cleanup():
    # 替换成你的实际清理逻辑,比如释放资源、清理临时对象等
    print("执行清理操作...")

def signal_handler(sig, frame):
    cleanup()
    # 抛出默认中断异常,让Blender仅终止当前脚本
    raise KeyboardInterrupt

# 注册SIGINT信号处理
signal.signal(signal.SIGINT, signal_handler)

# 示例耗时脚本(替换成你的业务代码)
while True:
    continue

原理说明

  • Blender对KeyboardInterrupt异常的处理逻辑是终止当前运行的脚本,而非关闭整个软件,这正是Ctrl+C的原生行为。
  • 在信号处理函数中先执行cleanup(),就能保证脚本终止前完成必要的清理工作。

注意事项

  • 如果在Blender脚本编辑器中反复测试,建议每次运行前重启脚本(或关闭再打开编辑器),避免旧的信号处理函数残留。
  • 对于包含阻塞操作的脚本,信号处理会立即触发,无需等待阻塞完成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 18:30:43