簡體   English   中英

在用戶需要的任何時候按 Esc 關閉程序的最佳方法?

[英]Best way to close the program pressing Esc anytime the user wants?

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

編輯:這有效:

import keyboard
import sys

def print_numbers():
    for n in range(150000):
        print(n)
        if keyboard.is_pressed('Esc'):
            sys.exit()


if __name__ == '__main__':
    print_numbers()

你必須加入這樣的過程:

p1.join()
p2.join()

或者也許只能通過線程來完成

你也可以這樣做:

def print_numbers():
    for n in range(150000):
        print(n)
        if keyboard.is_pressed('Esc'):
            sys.exit()

或者甚至可能使用 pygame 模塊作為上面的代碼來注冊按鍵

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM