为什么在使用 F1 键停止代码后按下 Enter 键时此代码不打印 Hi?

Why this code is not printing Hi when the Enter key is pressed after stopping the code using F1 key?

from pynput import keyboard
import time
break_program = True
def on_press(key):
    global break_program
    print (key)
    if key == keyboard.Key.f1:
        print ('end pressed')
        break_program = False
        return True
    elif key == keyboard.Key.enter:
        print ('enter pressed')
        break_program = True
        return True
    else:
        return True
print("Press 'F1' key to stop the bot.")
print("Press enter to start the bot.")
with keyboard.Listener(on_press=on_press) as listener:
    while break_program == True:
        print('Hi')
        time.sleep(1)
    listener.join()

此代码应在按下 F1 时停止 运行ning,在按下 Enter 时应停止 运行。

在按下 Enter 时,它进入 elif 状态并打印 enter pressed 但不打印 Hi 因为 break_program 被分配回 True

示例输出:

Press 'F1' key to stop the bot.
Press enter to start the bot.
Hi
Hi
Hi
Hi
Key.f1
end pressed
Key.enter
enter pressed

输出应该如何:

Press 'F1' key to stop the bot.
Press enter to start the bot.
Hi
Hi
Hi
Hi
Key.f1
end pressed
Key.enter
enter pressed
Hi
Hi
...

你应该使用非阻塞线程,你的代码应该是:

from pynput import keyboard
import time
break_program = True
def on_press(key):
    global break_program
    print (key)
    if key == keyboard.Key.f1 and break_program:
        print ('end pressed')
        break_program = False

    if key == keyboard.Key.enter:
        print ('enter pressed')
        break_program = True


print("Press 'F1' key to stop the bot.")
print("Press enter to start the bot.")

listener =  keyboard.Listener(on_press=on_press)
listener.start()
while True:
    if break_program:
        print("Hi")
        time.sleep(1)