如何用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
相关产品推荐
相关产品推荐

