Python Watchdog - функция отправки требуется? - PullRequest
0 голосов
/ 09 октября 2018

У меня есть Bluetooth-пульт, подключенный к RaspberryPi, и я хочу перехватывать любые события нажатия клавиш, которые хранятся в / dev / input / event0 с помощью сторожевого модуля.После некоторых проблем я решил проверить его с помощью небольшого тестового кода.И я обнаружил несколько проблем с пониманием.Во-первых, это тестовый код.Он должен просто вернуть «foo», если какой-либо файл на моем рабочем столе был изменен.

from watchdog.events import FileSystemEventHandler
from watchdog.observers import Observer
import time

class Event_Handler(FileSystemEventHandler):
    def on_modified(self, event):
        print("foo")
path = "/home/pi/Desktop"

observer = Observer()
observer.schedule(Event_Handler, path)
observer.start()

while(1):
    time.sleep(3)
    print("Again")

Полученная ошибка говорит:

Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib/python3.5/threading.py", line 914, in _bootstrap_inner
    self.run()
  File "/home/pi/.local/lib/python3.5/site-packages/watchdog/observers/api.py", line 199, in run
    self.dispatch_events(self.event_queue, self.timeout)
  File "/home/pi/.local/lib/python3.5/site-packages/watchdog/observers/api.py", line 368, in dispatch_events
    handler.dispatch(event)

Как я понимаю, диспетчеризация - это метод FileSystemEventHandler, которыйвызывает методы on_modified, on_created и т. д. в зависимости от типа события.Он вызывается в API наблюдателя, когда событие инициируется, но каким-то образом вызывается с пустым аргументом.Мой вопрос сейчас: это моя ошибка или это связано с библиотекой watchdog?Я использую сторожевой таймер 0.9.0 и увидел, что исходный код в этой части изменился с 0.8.2, что задокументировано здесь .

Другой вопрос, касающийся этого вопроса, заключается в том, что я должен датьисходный путь для файловой системы, которую я хотел бы отслеживать.Когда я указываю полный путь '/ dev / input / event0', выдается ошибка, говорящая, что это не каталог.Это не дает мне ошибку, когда я передаю '/ dev / input'.Я понимаю, почему это исправляет ошибку, но как я смогу различить изменения в файле event0 и любых других устройствах ввода?И это даже правдоподобный способ поймать входы?

Спасибо за вашу помощь, Феликс

...