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

如何用Ctrl+Q热键退出Python脚本?解决自动化执行时无法退出问题

解决脚本执行自动化操作时无法通过热键退出的问题

针对你的问题,有两种简单可行的方案,适合入门阶段使用:

方案一:注册全局热键(推荐)

利用keyboard库的add_hotkey功能注册全局热键,只要热键被按下就立即触发退出逻辑,不受脚本当前执行的阻塞操作影响。修改后的代码如下:

import pyautogui
import keyboard
import time
import sys  # 导入sys用于退出程序

def exit_script():
    print("已触发Ctrl+Q,退出脚本")
    sys.exit()

# 注册全局热键Ctrl+Q,触发退出函数
keyboard.add_hotkey('ctrl+q', exit_script)

def theFunction():
    color = (255, 255, 255)
    s = pyautogui.screenshot(region=(386, 847, 300, 400))
    if s.getpixel((0, 0)) == color:
        pyautogui.moveTo(100, 100, duration=1)
        return
    print("a")
    print("b")

while True:
    theFunction()
    time.sleep(0.1)

这个方案不需要修改原有业务逻辑,全局热键在后台持续监听,不管脚本是在截图、移动鼠标还是休眠,只要按下Ctrl+Q就会立即退出。

方案二:拆分阻塞操作,插入热键检查

如果不想用全局热键,可以把pyautogui.moveTo这类长耗时操作拆分成多个小步骤,每执行一小步就检查一次热键,缩小无法响应的时间窗口。示例代码:

import pyautogui
import keyboard
import time

def check_exit():
    if keyboard.is_pressed('ctrl+q'):
        print("You pressed 'ctrl+q'.")
        exit()

def theFunction():
    color = (255, 255, 255)
    s = pyautogui.screenshot(region=(386, 847, 300, 400))
    if s.getpixel((0, 0)) == color:
        # 拆分移动过程:分10次小移动,每次移动前后检查热键
        start_x, start_y = pyautogui.position()
        target_x, target_y = 100, 100
        step_x = (target_x - start_x) / 10
        step_y = (target_y - start_y) / 10
        for _ in range(10):
            check_exit()
            pyautogui.moveRel(step_x, step_y, duration=0.1)
            check_exit()
        return
    print("a")
    print("b")

while True:
    check_exit()
    theFunction()
    time.sleep(0.1)

这个方法把1秒的移动拆成10次0.1秒的小移动,每次操作前后都检查热键,让你在鼠标移动过程中也能通过Ctrl+Q触发退出。


内容的提问来源于stack exchange,提问作者Bee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 08:45:20