【问题标题】:How to stop a function & exit program running in a while loop on key press?如何在按键时停止函数并退出在while循环中运行的程序?
【发布时间】:2022-01-24 08:53:57
【问题描述】:

当按下键盘键 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()

【问题讨论】:

    标签: python python-3.x while-loop python-keyboard


    【解决方案1】:

    您可以添加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()
    
    

    【讨论】:

    • while not exitProgram: time.sleep(1)没有如何轮询键盘?
    【解决方案2】:

    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()
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-15
      • 2015-07-19
      • 1970-01-01
      • 2018-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多