[英]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.