使用python检测关闭事件

Jas*_*son 5 python windows subprocess shutdown

我有一个 Minecraft 基岩版服务器在我们的共享电脑上运行。我想通过 python 与它交互。然而,我遇到的一个问题是我的兄弟有时会重新启动我们的电脑或 Windows 更新。我需要知道如何检测关闭事件并在重新启动之前将关闭命令发送到服务器。我正在使用子流程库。

Sam*_*ade 2

因此,您需要的是 win32API 和此处描述的函数。您可以使用此函数添加所谓的控制处理程序方法,该方法将在程序因任何原因(包括关闭)而关闭或终止时运行。您可以在此处找到可传递给处理程序的不同代码及其含义的列表。理想情况下,您应该有一个处理程序方法,该方法仅关闭服务器,等待其完成关闭,然后返回。

我对图书馆没有任何个人经验,但它应该相当简单。

编辑:正如@ErykSun 所指出的,您将需要创建一个隐藏窗口才能接收事件。老实说,我不知道如何创建那个隐藏的窗口。一些文档表明将应用程序作为服务运行也可能有效。如果有时间,我会进一步研究这个问题。

  • python.exe 加载 user32.dll。因此,即使只是一个控制台应用程序,系统也会将其视为 GUI 应用程序,并且不会发送注销和关闭事件的控制事件。正如“SetConsoleCtrlHandler”的[备注](https://learn.microsoft.com/en-us/windows/console/setconsolectrlhandler#remarks)的最后两段中所建议的,脚本必须创建一个隐藏窗口并处理“WM_QUERYENDSESSION”和“WM_ENDSESSION”。 (2认同)