5
$\begingroup$

Is it possible to get a callback before Blender closes?

There are bpy.app.handlers. Unfortunately there is no handler for closing Blender.

So is there a way to to know in a script when blender is about to close?

$\endgroup$
5
$\begingroup$

While we could support this via bpy.app.handlers, we decided not to add this since Python already supports exit callbacks, so you can use these (outside of Blender too - for any Python script).

See Python's atexit module.

Simple example use:

def goodbye(name, adjective):
    print("Goodbye, %s, it was %s to meet you." % (name, adjective))

import atexit
atexit.register(goodbye, "Suzanne", "nice")

Note : To unregister the callback when disabling an add-on for instance, you can use :

atexit.unregister(callback)
$\endgroup$
4
  • $\begingroup$ ok. This works. But I have a problem with it. When running the script from blender this function gets registered. But when putting it into an addon I get this error: Error: EXCEPTION_ACCESS_VIOLATION $\endgroup$ – ndee Mar 10 '16 at 10:21
  • $\begingroup$ Try find which line causes the error, This will run when Blender is shutting down - so its possible you access data which is already freed. $\endgroup$ – ideasman42 Mar 10 '16 at 10:25
  • 2
    $\begingroup$ I know this post is very old, but I wanted to add information in case anyone finds this post because of the same problem. If you try to access your add-on's preferences during this event, you will get an access violation error. I was able to access several things from Blender, but not my own addon's preferences. In my opinion, Blender should notify add-ons of a shutdown BEFORE any data is released. $\endgroup$ – Robert Nov 11 '19 at 12:18
  • $\begingroup$ where do you use atexit.register? i tried placing it in the add-on def register but it doesn't seem to work $\endgroup$ – mayotic Jun 6 '20 at 17:56

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.