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
相关产品推荐
相关产品推荐

