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

为Python自动按键程序添加定时停止功能的技术问题

解决方案

你的代码存在两个核心问题:一是while循环内没有修改name的逻辑,注释位置在循环结束后根本无法执行;二是仅在程序启动时监听Esc键,循环过程中没检测Esc输入,导致手动启停失效。以下是两种可行的实现方式:

方法一:基于时间差的简单定时停止

通过记录程序启动时间,每次循环检查是否达到设定时长,同时保留Esc手动停止功能:

import keyboard
import time

# 等待第一次按下Esc启动程序
keyboard.wait('esc')

run_duration = 10  # 设定自动停止时长(单位:秒)
start_time = time.time()
running = True

while running:
    # 检查是否达到自动停止时长
    if time.time() - start_time >= run_duration:
        running = False
        break
    
    keyboard.press_and_release('5')
    time.sleep(0.1)
    
    # 检查是否按下Esc手动停止
    if keyboard.is_pressed('esc'):
        running = False
        break

方法二:使用线程定时器(不阻塞主循环)

如果需要同时处理其他任务,可通过线程定时器实现定时停止,避免阻塞按键循环:

import keyboard
import time
import threading

def auto_stop():
    global running
    running = False

# 等待第一次按下Esc启动程序
keyboard.wait('esc')

run_duration = 10  # 设定自动停止时长(单位:秒)
running = True

# 启动定时器,到达时长后执行auto_stop
timer = threading.Timer(run_duration, auto_stop)
timer.start()

while running:
    keyboard.press_and_release('5')
    time.sleep(0.1)
    
    # 检查是否按下Esc手动停止,同时取消定时器
    if keyboard.is_pressed('esc'):
        running = False
        timer.cancel()
        break

关键说明

  1. 替换了原代码中name变量的判断逻辑,用更直观的running布尔变量控制循环。
  2. 循环内加入Esc按键检测,实现真正的启停热键功能。
  3. 方法一通过计算时间差判断是否停止,无需额外线程;方法二用线程定时器,适合复杂场景下的非阻塞定时。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 18:10:31