我创建了此函数来接受用户输入,但仅在用户开始键入后才进行,同时确保输入提示始终位于第一个。
代码:
def handle_input(conn):
try:
while running:
# Wait for keypress
trigger = keyboard.read_event()
if trigger.event_type == keyboard.KEY_DOWN and len(str(trigger.name)) == 1:
# Display prompt with initial letter
sys.stdout.write(f"\r<User> {trigger.name}")
sys.stdout.flush()
with output_lock:
# Take and process user input
user_input = input().strip()
process_message(conn, f"{trigger.name}{user_input}")
except UnicodeDecodeError:
pass
但是我遇到了一个随机发生的问题。在某些情况下,第一次按键将由
keyboard.read_event()
和 input()
记录。我知道如果发生重复,可以退格,但是是否可以添加更重要的修复来防止这种行为?
keyboard.read_event()
和input()
都捕获相同的按键,导致第一个键被重复。发生这种情况是因为 keyboard.read_event()
不会阻止按键传播到输入缓冲区,然后 input()
会读取输入缓冲区。
要解决此问题,您可以在使用
keyboard.block_key(trigger.name)
检测到第一次按键后暂时抑制键盘输入,然后在需要时取消阻止。
希望这对您有帮助