You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 04:55:22