Löst ein Ereignis aus, wenn sich der Inhalt der Zwischenablage ändert

8

Ich versuche, den Inhalt der Zwischenablage mithilfe eines Python-Skripts auf meinem Mac Lion zu erhalten.

Ich suche nach einem Ereignis oder etwas Ähnlichem, denn wenn ich eine Schleife verwende, verbringt meine Anwendung die ganze Zeit damit, die Zwischenablage zu beobachten.

Irgendwelche Ideen?

    
Marvin Oßwald 04.02.2013, 11:38
quelle

3 Antworten

16

Haben Sie darüber nachgedacht, eine Endlosschleife zu verwenden und zwischen den Versuchen zu "schlafen"? Ich benutzte pyperclip für ein einfaches PoC und es funktionierte wie ein Charme, und Windows und Linux.

%Vor%

Anstelle von print , mach was du willst. Wenn Sie Hilfe bei Multithreading benötigen, um dies in einen Hintergrundthread einzufügen, sagen Sie es mir bitte.

BEARBEITEN

Hier ist ein vollständiges Multithreading-Beispiel.

%Vor%

Ich erstelle eine Unterklasse von threading.Thread, überschreibe die Methoden run und __init__ und erstelle eine Instanz dieser Klasse. Wenn Sie watcher.start() (nicht run() !) Aufrufen, starten Sie den Thread.

Um den Thread sicher zu stoppen, warte ich auf -c (Keyboard-interrupt) und sage dem Thread, dass er sich selbst stoppen soll.

In der Initialisierung der Klasse haben Sie auch einen Parameter pause , um zu steuern, wie lange zwischen den Versuchen gewartet werden soll.

Verwenden Sie die Klasse ClipboardWatcher wie in meinem Beispiel, ersetzen Sie den Callback mit dem, was Sie tun, z. B. lambda x: bitly(x, username, password) .

    
Thorsten Kranz 04.02.2013 13:09
quelle
1

Python 3 Code für die obige Antwort ( Ссылка ):

%Vor%

PS- Ich konnte es wegen der niedrigen Reputationspunkte nicht als Kommentar hinzufügen, also füge ich das als Antwort hinzu.

    
jim031 04.02.2018 08:30
quelle
0

Betrachten wir pyperclip das Fleisch davon auf Macosx ist:

%Vor%

Diese arbeiten für mich, wie kommst du voran?

Ich verfolge Ihren Kommentar nicht so sehr, als wäre ich in einer Schleife.

BEARBEITEN Hinzugefügtes 'orrid polling-Beispiel, das zeigt, wie changeCount() auf jedem copy auf die Montagefläche stößt. Es ist immer noch nicht das, was das OP will, da es anscheinend kein Ereignis oder keine Benachrichtigung für Änderungen an NSPasteboard gibt.

%Vor%     
sotapme 04.02.2013 13:45
quelle