如何解决用户随时想要按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()
解决方法
编辑:这有效:
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()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。