首页 > 解决方案 > 在用户想要的任何时候按 Esc 关闭程序的最佳方法是什么?

问题描述

按 随时关闭程序的最佳方法是Esc什么?我需要在一个重要的代码中实现这个东西,但是我的实验没有奏效。

这是最后一个:

from multiprocessing import Process
import keyboard
import sys


def stop_anytime():
    bool = True
    while bool:
        try:
            if keyboard.is_pressed('Esc'):
                sys.exit()
                bool = False
        except:
            break

def print_numbers():
    for n in range(150000):
        print(n)
 

if __name__ == '__main__':
    p1 = Process(target=stop_anytime)
    p2 = Process(target=print_numbers)
    p1.start()
    p2.start()

标签: pythonprocessmultiprocessingpython-keyboard

解决方案


keyboard模块是多线程的,因此您不需要multiprocessing自己使用该模块来执行此操作。我认为最干净的方法是使用该keyboard.hook()函数来指定一个回调函数来执行所需的操作。

注意:由于此回调将从单独的keyboard线程调用sys.exit(),因此调用它只会退出该线程,而不是整个程序/进程。要实现这一点,您需要改为调用os._exit()

import keyboard
import os


def exit_on_key(keyname):
    """ Create callback function that exits current process when the key with
        the given name is pressed.
    """
    def callback(event):
        if event.name == keyname:
            os._exit(1)
    return callback


def print_numbers():
    for n in range(150000):
        print(n)


if __name__ == '__main__':

    keyboard.hook(exit_on_key('esc'))
    print_numbers()

推荐阅读