Saya ingin menjalankan skrip python sederhana di latar belakang yang membaca teks dari clipboard dan mencetaknya. Ini kode saya.
#!/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()
Ini berfungsi seperti yang diharapkan tetapi mengkonsumsi CPU terlalu banyak (CPU 100%).
Bagaimana saya bisa membuatnya bekerja dengan benar tanpa mengkonsumsi sebanyak itu?
Jawaban:
Anda lupa
time.sleep()
diwhile
loop Anda , menurut jawaban ini pada SO tidur untuk 0.2s adalah kompromi yang baik antara frekuensi polling dan beban CPU:Memeriksa clipboard setiap 0,2 detik sepertinya cukup mudah; jika Anda ingin lebih sedikit beban CPU, Anda bahkan dapat meningkatkan nilai ini - beberapa pengguna mengubah konten clipboard dari satu detik ke yang lain.
Perhatikan bahwa dalam polling umum dalam satu lingkaran sesering yang tidak dianggap desain yang baik. Pendekatan yang lebih baik akan bertindak pada acara mengubah isi clipboard, contoh untuk GTK dapat ditemukan dalam jawaban SO ini .
Bacaan lebih lanjut
time.sleep()
time.sleep()
sumber
Saya akhirnya membuatnya bekerja tanpa loop. Ini kodenya:
Saya harus menginstal beberapa modul:
sudo apt install python3-gi python3-gi-cairo gir1.2-gtk-3.0
jangan ragu untuk memilih solusi yang cocok untuk Anda.
sumber
clip.wait_for_text()
dua kali?Anda menjalankannya dalam satu
while True:
lingkaran! Itu berarti bahwa CPU secara konstan menjalankan loop Anda. Cukup tambahkan jeda kecil di sana dan Anda akan melihat penurunan penggunaan CPU dengan cepat:sumber
Saya tertarik dengan proyek ini sehingga menulis skrip bash untuk mereka yang lebih nyaman di lingkungan itu:
Itu memang membutuhkan
xclip
paket Xorg :Ini membuang konten clipboard ke layar menggunakan
cat
perintah. Jika Anda ingin hard copy ganticat
denganlp
dan tentukan nama printer Anda, orientasi dan mungkin opsi "fit to page".Anda akan melihat sedikit lag ke layar karena saya memilih
sleep 1.0
yang tidak akan terlihat dengan printer dan masih lebih cepat daripada orang dapat menyorot teks dan menggunakan Ctrl+ C.Jika Anda menyalin teks yang disorot sama persis ke clipboard itu tidak memicu perbedaan. Satu huruf kurang lebih akan memicu respons.
sumber