python - 在用户想要的任何时候按 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()
解决方案
该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()
推荐阅读
- python - ValueError: 数组的真值...但它只是一个 int
- tcl - 在 tcl 中运行代码期间意外退出
- rust - 将petgraph点写入文件
- javascript - 使用 Vue 和 webpack 钩住 HMR
- python - 使用python在硒中打开谷歌浏览器时出错
- java - Http Post的响应码是415,如何让响应码变成200
- android - 如何提取消息标题和正文形式 OneSignal 推送通知 Flutter
- php - 获取包含父母、孩子和元数据的帖子类型
- multicast - Ghost 12 - 不能跨子网多播
- python - pip install regex 无法在 Anaconda python3.6.9 virtualenv 上构建