Quiero ejecutar un script de python simple en segundo plano que lea el texto del portapapeles y lo imprima. Aquí está mi código.
#!/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()
Esto funciona como se esperaba pero consume demasiada CPU (100% CPU).
¿Cómo puedo hacer que funcione correctamente sin consumir tanto?
Respuestas:
Olvidó el
time.sleep()
en suwhile
bucle, de acuerdo con esta respuesta en SO, dormir durante 0.2s es un buen compromiso entre la frecuencia de sondeo y la carga de la CPU:Revisar el portapapeles cada 0.2 segundos parece bastante fácil; si desea menos carga de CPU, incluso puede aumentar este valor: pocos usuarios cambian el contenido del portapapeles de un segundo a otro.
Tenga en cuenta que, en general, el sondeo en bucle con tanta frecuencia como eso no se considera un buen diseño. Un mejor enfoque sería actuar en caso de cambiar el contenido del portapapeles, un ejemplo para GTK se puede encontrar en esta respuesta SO .
Otras lecturas
time.sleep()
time.sleep()
fuente
Finalmente hago que funcione sin bucle. Este es el código:
Tuve que instalar algunos módulos:
sudo apt install python3-gi python3-gi-cairo gir1.2-gtk-3.0
no dude en elegir la solución que más le convenga.
fuente
clip.wait_for_text()
dos veces?¡Estás ejecutando la cosa en un
while True:
bucle! Eso significa que la CPU está ejecutando constantemente su ciclo. Simplemente agregue una pequeña pausa allí y debería ver que el uso de la CPU cae precipitadamente:fuente
Este proyecto me intrigó, así que escribí un script bash para aquellos que se sienten más cómodos en ese entorno:
Requiere el
xclip
paquete de Xorg :Está volcando el contenido del portapapeles a la pantalla usando el
cat
comando. Si desea una copia impresa en vez reemplazarcat
conlp
y especificar el nombre de la impresora, la orientación y posiblemente la opción "Ajustar a la página".Verá un poco de retraso en la pantalla porque elijo
sleep 1.0
cuál sería imperceptible con una impresora y aún más rápido de lo que la gente puede resaltar el texto y usar Ctrl+ C.Si copia exactamente el mismo texto resaltado en el portapapeles, no se activará la diferencia. Una letra más o menos activará una respuesta.
fuente