在用户想要的任何时候按 Esc 关闭程序的最佳方法是啥?
Posted
技术标签:
【中文标题】在用户想要的任何时候按 Esc 关闭程序的最佳方法是啥?【英文标题】:Best way to close the program pressing Esc anytime the user wants?在用户想要的任何时候按 Esc 关闭程序的最佳方法是什么? 【发布时间】:2021-02-10 14:42:19 【问题描述】:按 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()
【问题讨论】:
顺便说一句,不要使用bool
作为变量名,它是一个内置函数。
@quamrana: bool
是内置 class
的名称——但你不使用它作为变量的名称是对的。
好的,文档称它为类和函数。我以为我会在评论之前检查一下,我发现built-in function bool()
这个documentation 说它是一个类——尽管类是在Python中是可调用的……
是的,我刚刚说过。
【参考方案1】:
编辑:这可行:
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 模块为上面的代码注册按键
【讨论】:
好的,这适用于该示例,但我需要能够随时退出。这意味着我在 selenium webdriver 工作时具有更长的功能,即使 webdriver 在 web 上搜索,我也希望能够退出。这就是我想使用流程的原因【参考方案2】: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()
【讨论】:
它不起作用:它说我没有定义 exit_on_key 和 keyname 我只能假设您没有以某种方式运行我的答案中的代码,因为它不仅对我有用,而且我想不出任何解释来解释您遇到的错误。 我的错,你完全正确对不起。谢谢大家!以上是关于在用户想要的任何时候按 Esc 关闭程序的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
防止用户在后台处理时单击表单上的任何内容的最佳方法是啥? [关闭]