Chcę uruchomić prosty skrypt Pythona w tle, który odczytuje tekst ze schowka i drukuje go. Oto mój kod.
#!/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()
Działa zgodnie z oczekiwaniami, ale zużywa zbyt dużo procesora (100% procesora).
Jak mogę sprawić, by działał poprawnie, nie zużywając tyle?
Odpowiedzi:
Zapomniałeś
time.sleep()
w swojejwhile
pętli, zgodnie z tą odpowiedzią, że uśpienie SO przez 0.2s jest dobrym kompromisem między częstotliwością odpytywania a obciążeniem procesora:Sprawdzanie schowka co 0,2 sekundy wydaje się dość często; jeśli chcesz zmniejszyć obciążenie procesora, możesz nawet zwiększyć tę wartość - niewielu użytkowników zmienia zawartość schowka z jednej sekundy na drugą.
Zauważ, że ogólnie odpytywanie w pętli tak często, jak to nie jest uważane za dobry projekt. Lepszym rozwiązaniem byłoby działanie w przypadku zmiany zawartości schowka, przykład dla GTK można znaleźć w tej odpowiedzi SO .
Dalsza lektura
time.sleep()
time.sleep()
źródło
W końcu sprawiam, że działa bez pętli. To jest kod:
Musiałem zainstalować kilka modułów:
sudo apt install python3-gi python3-gi-cairo gir1.2-gtk-3.0
wybierz rozwiązanie, które najbardziej Ci odpowiada.
źródło
clip.wait_for_text()
dwa razy?Działasz w
while True:
pętli! Oznacza to, że procesor stale pracuje w pętli. Po prostu dodaj małą pauzę i powinieneś zobaczyć, jak gwałtownie spada użycie procesora:źródło
Byłem zaintrygowany tym projektem, dlatego napisałem skrypt bash dla tych bardziej komfortowych w tym środowisku:
Wymaga
xclip
pakietu Xorg :Zrzuca zawartość schowka do ekranu za pomocą
cat
polecenia. Jeśli chcesz wymienić dysk kopii zamiastcat
zlp
i podać nazwę drukarki, orientacji i ewentualnie opcję „Dopasuj do strony”.Zobaczysz trochę opóźnień w stosunku do ekranu, ponieważ wybieram,
sleep 1.0
który byłby niezauważalny w drukarce i wciąż szybciej niż ludzie mogą wyróżnić tekst i użyć Ctrl+ C.Jeśli skopiujesz dokładnie ten sam podświetlony tekst do schowka, nie spowoduje to różnicy. Mniej więcej jedna litera wywoła odpowiedź.
źródło