6

我有一个循环运行的 Python 脚本,它会定期调整我的照明系统。当我关闭计算机时,我希望我的脚本能够检测到这一点,并完全关闭灯。

如何检测我的计算机开始在 Python 中关闭?

或者,假设 Windows 向 Python 发送“关闭时间”通知,我如何拦截它以杀死我的灯并退出循环?

4

2 回答 2

11

这是在系统关闭时执行操作的错误方法。关闭进程的工作是停止正在运行的进程,然后关闭电源;如果你试图从你的程序中检测到这种情况并通过采取一些最后的行动来做出反应,这是操作系统和你的程序之间的竞赛,谁先走。您的程序很可能在它设法执行必要的操作之前就已经停止了。

相反,您应该挂接到正常的协议以在关机时执行操作。这将告诉关闭实用程序向您的程序发送一个明确的信号并等待它被确认,这给您足够的时间(在合理的范围内)来做您必须做的事情。如何准确注册以获取通知因操作系统而异,因此这更多是一个特定于操作系统的问题,而不是 Python 问题。

于 2013-04-22T07:36:40.327 回答
4

您应该对WM_ENDSESSION消息做出反应。

当用户注销或计算机关闭时发送此消息。

如果您还想对睡眠/休眠做出反应,则需要WM_POWERBROADCAST处理PBT_APMSUSPEND.

但我不知道如何在 python 中做到这一点。我想这取决于您的窗口框架,因为您需要一个窗口/消息循环来接收消息。

于 2013-04-22T08:59:53.237 回答