如何在不使用time.sleep()的情况下每秒将值附加到列表中


global keys_pressed
keys_pressed = []
how_long_moved=[]
def keylogger():
keys = [KeyCode.from_char(letter) for letter in 'wasd']
def on_press(key):
start=time.time()
if key in keys:
print(f'good key {key}')
else: print(f'bad key {key}')
def on_release(key):
if key == Key.esc:
return False
with Listener(on_press=on_press, on_release=on_release) as listener:
listener.join()

我有上面的代码为一个键盘记录,记录每一个"w a s d"键作为一个好的键。是否可以在不使用time.sleep的情况下,每按下1秒就在列表how_long_moved中添加一个随机字母?

您应该使用非块线程。并使用time.time()检查时间:

import time
from pynput.keyboard import KeyCode, Key, Controller, Listener
import string, random
global keys_pressed
keys_pressed = []
how_long_moved=[]
def keylogger():
keys = [KeyCode.from_char(letter) for letter in 'wasd']
def on_press(key):
if key in keys:
print(f'good key {key}')
else: print(f'bad key {key}')
def on_release(key):
if key == Key.esc:
return False
listener = Listener(on_press=on_press, on_release=on_release)
listener.start()
start_time = time.time()
controller = Controller()
all_str = string.ascii_lowercase
while True:
if time.time() - start_time >= 1:
start_time = time.time()
random_pressed_key = random.choice(all_str)
controller.press(random_pressed_key)
how_long_moved.append(random_pressed_key)
print(how_long_moved)
keylogger()

示例输出:

['d']
good key 'd'
bad key 'g'
['d', 'g']
good key 's'
['d', 'g', 's']
bad key 'b'
['d', 'g', 's', 'b']

由于有两个线程,因此输出顺序不规则(how_long_movedbad key or good key(。

相关内容

最新更新