Я хочу получать события WMI асинхронно и обрабатывать их с помощью объекта SWbemSink. Microsoft предписывает вызвать IWbemServices.ExecNotificationQueryAsync, передав ему экземпляр SWbemSink.Когда происходит событие, оно доставляется в метод OnObjectReady объекта SWbemSink, чтобы клиент мог его обработать.Ниже приведен пример того, как сделать это в JS.Как мы можем сделать это в Python?Я знаю, как взаимодействовать с WMI с помощью win32com.client, но как реализовать сценарий Python, чтобы он выполнялся таким образом, управляемым событиями?
//Connects to default namespace (HKEY_LOCAL_MACHINE\Software\Microsoft\WBEM\Scripting\Default Namespace).
var wbemServices = GetObject("WinMgmts:{impersonationLevel=impersonate,(security)}");
//Create an event sink object.
var sink = WScript.CreateObject("WbemScripting.SWbemSink", "SINK_");
//Register an event query describing which events the client would like
//to receive.
wbemServices.ExecNotificationQueryAsync(
sink, "Select * From __InstanceOperationEvent within 0.5 Where TargetInstance ISA 'Win32_Process' and TargetInstance.Caption='explorer.exe'");
//Show a msg box to allow user to stop receiving events.
var wshShell = WScript.CreateObject("WScript.Shell");
wshShell.Popup("Click OK to stop listening for events...");
sink.Cancel();
//SWbemSink function called every time an event is ready.
function SINK_OnObjectReady(wbemObject, asyncContext) {
WScript.Echo("Event received: " + wbemObject.GetObjectText_());
}