Windows环境下隐藏脚本窗口时如何退出Python保活脚本?
解决方法
方法1:全局快捷键监听(推荐)
脚本窗口最小化后,控制台不在前台,Ctrl+C的中断信号没法传到Python进程。可以用pynput库监听全局键盘事件,设定专属快捷键(比如Ctrl+Alt+Q)直接终止脚本,不用切回窗口。
步骤:
- 先安装依赖:
pip install pynput - 修改脚本加入快捷键监听逻辑,示例代码:
import pyautogui import time from pynput import keyboard import sys stop_flag = False def on_press(key): global stop_flag # 监听Ctrl+Alt+Q组合键 try: if key == keyboard.KeyCode.from_char('q'): # 检查Ctrl和Alt是否同时按下 if keyboard.Controller().pressed(keyboard.Key.ctrl) and keyboard.Controller().pressed(keyboard.Key.alt): stop_flag = True return False # 停止监听 except AttributeError: pass # 启动监听线程 listener = keyboard.Listener(on_press=on_press) listener.start() # 定期移动鼠标的核心逻辑 while not stop_flag: current_x, current_y = pyautogui.position() pyautogui.moveTo(current_x + 10, current_y, duration=0.1) pyautogui.moveTo(current_x, current_y, duration=0.1) # 非阻塞等待,每0.5秒检查一次终止信号 start_time = time.time() while time.time() - start_time < 30 and not stop_flag: time.sleep(0.5) listener.stop() sys.exit()
按下Ctrl+Alt+Q后,不管脚本窗口是否在前台,都会立刻终止运行。
方法2:任务管理器直接结束进程
不用修改代码,Windows下按Ctrl+Shift+Esc打开任务管理器,在「进程」列表里找到python.exe或pythonw.exe(无窗口运行时),右键选择「结束任务」即可秒停脚本。
方法3:替换time.sleep为非阻塞等待
把原本的time.sleep(n)改成循环检查的方式,这样切回脚本窗口后按Ctrl+C,不用等sleep结束就能立刻响应中断:
import pyautogui import time import sys while True: try: current_x, current_y = pyautogui.position() pyautogui.moveTo(current_x + 10, current_y, duration=0.1) pyautogui.moveTo(current_x, current_y, duration=0.1) # 非阻塞等待30秒,每0.5秒检查一次中断信号 start_time = time.time() while time.time() - start_time < 30: time.sleep(0.5) except KeyboardInterrupt: print("脚本已终止") sys.exit()
内容的提问来源于stack exchange,提问作者Nielson
相关产品推荐
相关产品推荐

