¿Detectando apagado de computadora / progtwig en Python?

Tengo una secuencia de comandos de Python que se ejecuta en un bucle regularmente haciendo ajustes a mi sistema de iluminación. Cuando apague mi computadora, me gustaría que mi script detecte eso y apague las luces por completo.

¿Cómo detecto que mi computadora comienza a apagarse en Python?

O bien, suponiendo que Windows envíe a Python un aviso de “hora de apagarse”, ¿cómo lo intercepto para apagar mis luces y salir del ciclo?

Debes reactjsr al mensaje WM_ENDSESSION .

Este mensaje se envía cuando el usuario cierra la sesión o la computadora se apaga.

Si también quieres reactjsr a Sleep / Hibernate, deberás manejar WM_POWERBROADCAST con PBT_APMSUSPEND .

Pero no sé cómo hacer eso en python. Supongo que depende de su marco de ventanas, ya que necesita tener una ventana / un bucle de mensajes para recibir mensajes.

Esta es la forma incorrecta de llevar a cabo la acción en el momento de apagado del sistema. El trabajo del proceso de apagado es detener los procesos en ejecución y luego desconectar la alimentación; Si intentas detectar que esto sucede desde dentro de tu progtwig y reactjss con una acción final, es una carrera entre el sistema operativo y tu progtwig quien se va primero. Es más probable que su progtwig haya sido detenido antes de que logre realizar la acción necesaria.

En su lugar, debe conectarse al protocolo normal para hacer cosas en el cierre. Esto le indicará a la utilidad de apagado que envíe una señal explícita a su progtwig y espere a que se confirme, lo que le da suficiente tiempo (dentro de lo razonable) para hacer lo que tiene que hacer. La forma exacta de registrarse para recibir notificaciones varía según el sistema operativo, por lo que esta es más una pregunta específica del sistema operativo que una pregunta de Python.