Python - WMI Watch_for внутри потока вызывает исключение - PullRequest
0 голосов
/ 13 января 2019

У меня есть следующий код:

import subprocess
import threading
import wmi

class DriveWatcher:

    @property
    def drive_watcher_stop_event(self):
        return self._drive_watcher_stop_event
    @drive_watcher_stop_event.setter
    def drive_watcher_stop_event(self, drive_watcher_stop_event):
        self._drive_watcher_stop_event = drive_watcher_stop_event

    @property
    def drive_watcher_thread(self):
        return self._drive_watcher_thread
    @drive_watcher_thread.setter
    def drive_watcher_thread(self, drive_watcher_thread):
        self._drive_watcher_thread = drive_watcher_thread

    def __init__(self):
        self.c = wmi.WMI()
        self.watcher = self.c.Win32_DiskDrive.watch_for()  # InterfaceType="USB"
        self.drive_watcher_stop_event = threading.Event()
        self.drive_watcher_thread = None

    def drive_watcher_loop(self):
        while not self.drive_watcher_stop_event.is_set():
            try:
                disk = self.watcher(timeout_ms=10000)
                print(disk)
            except wmi.x_wmi_timed_out:
                pass


    def start_drive_watcher(self):
        if self.drive_watcher_thread:
            if self.drive_watcher_stop_event.is_set():
                self.drive_watcher_stop_event.clear()
        else:
            self.drive_watcher_thread = threading.Thread(target=self.drive_watcher_loop, args=())
            self.drive_watcher_thread.daemon = True
            self.drive_watcher_thread.start()

    def stop_drive_watcher(self):
        self.drive_watcher_stop_event.set()

watcher = media_tools.DriveWatcher()
watcher.start_drive_watcher()

Это вызывает следующее исключение:

event = self.wmi_event.NextEvent (timeout_ms) Файл ">", строка 2, в NextEvent pywintypes.com_error: (-2147352567, «Произошло исключение.», (0, «SWbemEventSource», нет, нет, 0, -2147221008), нет)

Что вызывает это? Как мне устранить такие неочевидные исключения?

1 Ответ

0 голосов
/ 13 февраля 2019

Не обязательно ваш код. У меня была похожая проблема. См. https://www.thepythoncorner.com/2018/08/how-to-create-a-windows-service-in-python/ - раздел «Если что-то идет не так ...» Короткая версия: проверьте, есть ли pythoncom36.dll и pywintypes36.dll в каталоге win32 (где pythonservice.exe)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...