Eu quero executar um script python simples em segundo plano que lê o texto da área de transferência e o imprime. Aqui está o meu 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()
Isso está funcionando conforme o esperado, mas consome muita CPU (100% da CPU).
Como posso fazê-lo funcionar corretamente sem consumir muito?
Respostas:
Você esqueceu a
time.sleep()
suawhile
loop, de acordo com esta resposta em SO dormir por 0.2s é um bom compromisso entre a frequência de consulta e carga da CPU:Verificar a área de transferência a cada 0,2 segundos parece ser bastante fácil; se você deseja menos carga de CPU, pode aumentar esse valor - poucos usuários alteram o conteúdo da área de transferência de um segundo para outro.
Observe que, em geral, a sondagem em um loop sempre que isso não é considerado um bom design. Uma abordagem melhor seria agir no caso de alterar o conteúdo da área de transferência; um exemplo para o GTK pode ser encontrado nesta resposta do SO .
Leitura adicional
time.sleep()
time.sleep()
fonte
Eu finalmente faço funcionar sem loop. Este é o código:
Eu tive que instalar alguns módulos:
sudo apt install python3-gi python3-gi-cairo gir1.2-gtk-3.0
fique à vontade para escolher a solução mais adequada para você.
fonte
clip.wait_for_text()
duas vezes?Você está executando a coisa em um
while True:
loop! Isso significa que a CPU está constantemente executando seu loop. Basta adicionar uma pequena pausa lá e você verá o uso da CPU cair vertiginosamente:fonte
Fiquei intrigado com este projeto, por isso escrevi um script bash para aqueles mais confortáveis naquele ambiente:
Requer o
xclip
pacote do Xorg :Está despejando o conteúdo da área de transferência na tela usando o
cat
comando Se desejar cópia impressa, substituacat
porlp
e especifique o nome da impressora, a orientação e, possivelmente, a opção "ajustar à página".Você verá um pouco de atraso na tela porque eu escolho o
sleep 1.0
que seria imperceptível em uma impressora e ainda mais rápido do que as pessoas podem destacar texto e usar Ctrl+ C.Se você copiar exatamente o mesmo texto destacado para a área de transferência, isso não causará diferença. Uma letra mais ou menos acionará uma resposta.
fonte