如何在按键时的 while 循环中停止功能并退出程序 运行?

How to stop a function & exit program running in a while loop on key press?

我需要在按下键盘键 q 时停止程序。我怎样才能在下面的代码中实现这一点?如何忽略 time.sleep 并检测按键并通过打印内容退出程序?目前,只有在 10 秒后才会检测到按键。假设我在 3 秒后按 q 程序没有退出。

import sys
import time

import keyboard

def hd():
    print("Hi")
    time.sleep(10)
    if keyboard.is_pressed("q"):
        print(keyboard.is_pressed("q"))
        sys.exit()


while True:
    hd()

time.sleep() 是阻塞调用。您的程序在运行时没有任何反应。

缩短间隔。例如,不是睡 10 秒,而是睡 100 × 0.1 秒。

import sys
import time

import keyboard

def hd():
    print("Hi")
    for _ in range(100):
        time.sleep(0.1)
        if keyboard.is_pressed("q"):
            print(keyboard.is_pressed("q"))
            sys.exit()

while True:
    hd()

对于更复杂的行为(在进行实际工作的同时还监听键盘事件),您将不得不研究多线程。

您可以只添加一个 hotkey,而不是通过轮询键盘来检查某个键是否被按下。当按下热键 q(或任何你喜欢的键)时,触发函数 quit 被调用。

import keyboard
import time
import sys

exitProgram = False

# prepare to exit the program
def quit():
    global exitProgram
    exitProgram=True
    
# set hotkey    
keyboard.add_hotkey('q', lambda: quit())

# main loop to do things
while not exitProgram:
    print("Hello")
    time.sleep(1)
    
print("bye bye")
sys.exit()