6

I have a Python script that runs in a loop regularly making adjustments to my lighting system. When I shut down my computer, I'd like my script to detect that, and turn off the lights altogether.

How do I detect my computer beginning to shut down in Python?

Or, assuming Windows sends Python a "time to shut down" notice, how do I intercept that to kill my lights and exit the loop?

2
  • Hi Crummy, questions about how to actually implement something with code belong on StackOverflow (admins should be able to migrate it). Commented Apr 22, 2013 at 7:14
  • Possible duplicate of Python - Windows Shutdown Events Commented Apr 15, 2018 at 12:56

2 Answers 2

11

This is the wrong way to go about performing action at system shutdown time. The job of the shutdown process is to stop running processes and then switch off power; if you try to detect this happening from within your program and react by getting some last action in, it's a race between the OS and your program who gets to go first. More likely than not your program will have been stopped before it managed to perform the necessary action.

Instead, you should hook into the normal protocol for doing things at shutdown. This will tell the shutdown utility to send an explicit signal to your program and wait for it to be acknowledged, which gives you enough time (within reason) to do what you have to do. How exactly to register to be notified varies with the OS, so this is more of an OS-specific question rather than a Python question.

Sign up to request clarification or add additional context in comments.

Comments

5

You should react to the WM_ENDSESSION message.

This message is sent when the user logs off or the computer gets shut down.

If you want to react to Sleep/Hibernate as well, you'll need to handle WM_POWERBROADCAST with PBT_APMSUSPEND.

But I don't know how to do that in python. I guess it depends on your windowing framework since you need have a windows/a message loop to receive messages.

1 Comment

Thanks - your comment lead me to stackoverflow.com/questions/1411186/… which I think is what I'm looking for. Appreciate the help!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.