Je veux exécuter un script python simple en arrière-plan qui lit le texte du presse-papiers et l'imprime. Voici mon code.
#!/usr/bin/env python
import Tkinter
last_clipboard = ""
def get_clipboard():
global last_clipboard
root = Tkinter.Tk()
root.withdraw() # Hide the main window (optional)
text_in_clipboard = root.clipboard_get()
if text_in_clipboard != last_clipboard:
last_clipboard = text_in_clipboard
print last_clipboard
while True:
get_clipboard()
Cela fonctionne comme prévu mais consomme trop de CPU (100% CPU).
Comment puis-je le faire fonctionner correctement sans consommer autant?
Réponses:
Vous avez oublié le
time.sleep()
dans votrewhile
boucle, selon cette réponse sur SO dormir pendant 0,2 s est un bon compromis entre la fréquence d'interrogation et la charge CPU:Vérifier le presse-papiers toutes les 0,2 secondes semble assez souvent; si vous voulez moins de charge CPU, vous pouvez même augmenter cette valeur - peu d'utilisateurs modifient le contenu du presse-papiers d'une seconde à l'autre.
Notez qu'en général, l'interrogation dans une boucle aussi souvent que cela n'est pas considérée comme une bonne conception. Une meilleure approche serait d'agir en cas de changement du contenu du presse-papiers, un exemple pour GTK peut être trouvé dans cette réponse SO .
Lectures complémentaires
time.sleep()
time.sleep()
la source
Je l'ai finalement fait fonctionner sans boucle. Voici le code:
J'ai dû installer quelques modules:
sudo apt install python3-gi python3-gi-cairo gir1.2-gtk-3.0
n'hésitez pas à choisir la solution qui vous convient.
la source
clip.wait_for_text()
deux fois?Vous exécutez la chose en
while True:
boucle! Cela signifie que le CPU exécute constamment votre boucle. Ajoutez simplement une petite pause à cet endroit et vous devriez voir l'utilisation du processeur diminuer brutalement:la source
J'ai été intrigué par ce projet, j'ai donc écrit un script bash pour ceux qui sont plus à l'aise dans cet environnement:
Il nécessite le
xclip
package de Xorg :Il vide le contenu du presse-papiers sur l'écran à l'aide de la
cat
commande. Si vous souhaitez une copie papier à la place, remplacez-lacat
parlp
et spécifiez le nom de votre imprimante, son orientation et éventuellement l'option "Ajuster à la page".Vous verrez un peu de décalage à l'écran parce que je choisis
sleep 1.0
ce qui serait imperceptible avec une imprimante et encore plus rapide que les gens peuvent mettre du texte en surbrillance et utiliser Ctrl+ C.Si vous copiez exactement le même texte en surbrillance dans le presse-papiers, cela ne déclenchera pas de différence. Plus ou moins une lettre déclenchera une réponse.
la source