Python程序运行过程中监控按键实现手动退出

发布于:2023-03-10 18:06:57

1、背景

python后台程序运行过程中,常需要手动退出,我们可以通过鼠标或组合键ctrl+x/z的方式退出,但在某些场景下无法使用这些方法,需要通过监控键盘按键实现程序退出操作。

特殊场景:pyautogui、pynput等键盘开发自动操作程序时,程序无法退出

2、实现逻辑

使用pynput包监控键盘按键,当按下指定按键时程序退出

3、实现过程(非阻塞)

使用多线程分别运行用户程序以及监控按键,当现场监控到按下指定按键时,系统整体退出

注:非阻塞指的是按键的进程不会影响自己的程序执行,他们分别在不同的线程内,各自执行互不影响,系统通过对isEnd的整体监控实现主程序的退出

from pynput import keyboard
import time
import threading
 
isEnd = False
 
 
# 键盘按下执行的函数 使用try和except的原因是有特殊按键(功能键)
def keyboard_on_press(key):
    global isEnd
    try:
        print('字母键{0} press'.format(key.char))
    except AttributeError:
        print('特殊键{0} press'.format(key))
        if key == keyboard.Key.esc:
            isEnd = True
            return False
 
 
# 被中断的程序
def function():
    while True:
        print(0)
        time.sleep(1)
 
 
def main():
    global isEnd
    # 创建、启动键盘监听线程
    listener = keyboard.Listener(on_press=keyboard_on_press)
    listener.daemon = 1
 
    # 创建、启动鼠标监听线程
    t2 = threading.Thread(target=function)
    t2.daemon = 1
    listener.start()
    t2.start()
    while True:
        if isEnd:
            return
 
 
if __name__ == "__main__":
    main()

这段程序按下esc键时退出

本文参考: https://blog.csdn.net/weixin_44001521/article/details/119512625

阅读 982