Я хочу запустить простой Python-скрипт в фоновом режиме, который читает текст из буфера обмена и распечатывает его. Вот мой код
#!/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()
Это работает, как и ожидалось, но потребляет слишком много ЦП (100% ЦП).
Как я могу заставить его работать правильно, не потребляя так много?
Ответы:
Вы забыли
time.sleep()
в своемwhile
цикле, согласно этому ответу SO спит в течение 0,2 с - это хороший компромисс между частотой опроса и нагрузкой на процессор:Проверка буфера обмена каждые 0,2 секунды кажется достаточно простой; если вы хотите уменьшить нагрузку на процессор, вы можете даже увеличить это значение - мало пользователей меняют содержимое буфера обмена с одной секунды на другую.
Обратите внимание, что в общем опрос в цикле так часто, как это не считается хорошим дизайном. Лучшим подходом было бы действовать в случае изменения содержимого буфера обмена, пример для GTK можно найти в этом ответе SO .
дальнейшее чтение
time.sleep()
time.sleep()
источник
Я наконец заставляю это работать без петли. Это код:
Мне пришлось установить несколько модулей:
sudo apt install python3-gi python3-gi-cairo gir1.2-gtk-3.0
не стесняйтесь выбирать решение, которое подходит для вас.
источник
clip.wait_for_text()
дважды?Вы запускаете вещь в
while True:
цикле! Это означает, что процессор постоянно запускает ваш цикл. Просто добавьте небольшую паузу, и вы увидите, что загрузка процессора резко падает:источник
Я был заинтригован этим проектом, поэтому написал сценарий bash для тех, кто чувствует себя более комфортно в этой среде:
Требуется
xclip
пакет Xorg :Он выводит содержимое буфера обмена на экран с помощью
cat
команды. Если вы хотите твердую копию вместо заменыcat
сlp
и указать имя принтера, ориентацию и , возможно , «подходит к странице» вариант.Вы увидите некоторое отставание от экрана, потому что я выбираю то,
sleep 1.0
что было бы незаметно для принтера и все же быстрее, чем люди могут выделить текст и использовать Ctrl+ C.Если вы скопируете точно такой же выделенный текст в буфер обмена, это не вызовет разницы. Одна буква более или менее вызовет ответ.
источник