我有一个循环运行的Python脚本,定期调整我的照明系统。当我关闭计算机时,我希望我的脚本能够检测到它,然后完全关闭它。
如何检测我的计算机开始在Python中关闭?
或者,假设Windows向Python发送“关闭时间”通知,我该如何拦截它来杀死我的灯并退出循环?
答案 0 :(得分:8)
这是在系统关闭时执行操作的错误方法。关机过程的工作是停止运行进程然后关闭电源;如果你试图从你的程序中发现这种情况并通过最后一次操作做出反应,那么它就是操作系统和你的程序之间的竞争。很可能你的程序在设法执行必要的操作之前就已经停止了。
相反,你应该挂钩正常的协议,以便在关机时做事。这将告诉关闭实用程序向程序发送一个显式信号并等待它被确认,这给了你足够的时间(在合理范围内)做你必须做的事情。如何通知注册以获得通知因操作系统而异,因此这更像是一个特定于操作系统的问题而不是Python问题。
答案 1 :(得分:2)
您应该对WM_ENDSESSION
消息做出反应。
当用户注销或计算机关闭时,会发送此消息。
如果您想对Sleep / Hibernate做出反应,则需要使用PBT_APMSUSPEND
处理WM_POWERBROADCAST
。
但我不知道如何在python中这样做。我想这取决于你的窗口框架,因为你需要一个窗口/一个消息循环来接收消息。