diff --git a/platypush/plugins/clipboard/__init__.py b/platypush/plugins/clipboard/__init__.py index a36db07f2..c1364b05f 100644 --- a/platypush/plugins/clipboard/__init__.py +++ b/platypush/plugins/clipboard/__init__.py @@ -1,3 +1,4 @@ +from time import time from typing import Optional from platypush.context import get_bus @@ -47,13 +48,22 @@ class ClipboardPlugin(RunnablePlugin): def main(self): import pyperclip - while not self.should_stop(): - text = pyperclip.paste() - if text and text != self._last_text: - get_bus().post(ClipboardEvent(text=text)) - self._last_text = text + last_error_time = 0 - self._should_stop.wait(0.1) + while not self.should_stop(): + try: + text = pyperclip.paste() + if text and text != self._last_text: + get_bus().post(ClipboardEvent(text=text)) + self._last_text = text + except Exception as e: + if time() - last_error_time > 60: + last_error_time = time() + self.logger.error( + 'Could not access the clipboard: %s: %s', type(e), e + ) + finally: + self._should_stop.wait(0.1) self.logger.info('Stopped clipboard monitor backend')