用户随时按 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()
只会退出那个线程,而不是整个 program/process。为此,您需要改为调用 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()
随时按 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()
只会退出那个线程,而不是整个 program/process。为此,您需要改为调用 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()