Windows10下Python代码如何实现按ESC键立即终止程序?
解决按下ESC键立即终止程序的问题
针对你的需求,在Windows10下实现按下ESC键立即终止程序,可以通过以下修改实现:
核心修改点
- 在键盘监听事件中添加ESC键的处理逻辑,直接调用系统级退出函数强制终止进程
- 使用
os._exit()替代普通的sys.exit(),它会直接结束整个Python进程,不会被线程或监听器阻塞
修改后的完整代码
import pydirectinput import datetime import time import threading import os # 新增导入os模块 from pynput.mouse import Controller, Button from pynput.keyboard import Listener, KeyCode, Key # 新增导入Key TOGGLE_KEY = KeyCode(char="`") clicking = False terminate = False # 新增终止标志,优化线程退出逻辑 mouse = Controller() def clicker(): global fishpause global a_press global maxtime global terminate duration = 0 while not terminate and duration <= maxtime: # 加入终止标志判断 qtime = datetime.datetime.utcnow() if qtime.hour == 11 and qtime.minute == 30: print("Quiting by using an error...") pydirectinput.keydown('alt') else: if clicking: mouse.press(Button.right) goleft(fishpause, a_press) duration += 1 print(f"Duration is: {duration}") time.sleep(0.5) time.sleep(0.5) mouse.release(Button.right) def toggle_event(key): global clicking global terminate if key == TOGGLE_KEY: clicking = not clicking print("Clicking changed") elif key == Key.esc: # 处理ESC键按下事件 print("ESC pressed, terminating immediately...") terminate = True os._exit(0) # 直接终止整个进程,无延迟 def goleft(fishpause, a_press): pydirectinput.press('a', presses=1, interval=a_press) print("Moving left") pydirectinput.PAUSE = fishpause print(f"PAUSING: {fishpause}") maxtime = 4500 fishpause = 9.0 a_press = 0.1 time.sleep(1) print("Starting") pydirectinput.press('esc', presses=1, interval=0.1) click_thread = threading.Thread(target=clicker) click_thread.daemon = True # 设置为守护线程,主进程退出时自动终止 click_thread.start() time.sleep(3) with Listener(on_press=toggle_event) as listener: listener.join()
关键说明
os._exit(0)会直接终止整个Python进程,不管当前线程是否处于sleep或执行状态,确保立即生效- 将click_thread设置为守护线程,即使没有
terminate标志,主进程退出时也会自动终止该线程 - 新增的
terminate标志是可选优化,让clicker线程能更优雅地退出,但os._exit()已经足够保证立即终止程序
内容的提问来源于stack exchange,提问作者acubens555
相关产品推荐
相关产品推荐

