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

如何实现按空格键暂停运行中脚本20秒并持续监听键盘输入?

实现脚本持续运行并监听空格键暂停的方案

没问题!我来帮你搞定这个需求——要让脚本一边持续运行,一边监听空格键触发“暂停20秒再恢复”的逻辑,关键是要做到非阻塞式的键盘输入监听,不然脚本会卡在等待输入的环节,没法正常持续运行。下面我用最常用的Python来给你具体方案:

方案1:使用第三方keyboard库(简单易实现)

这个库专门处理键盘监听,跨平台且API友好,先安装它:

pip install keyboard

然后是示例脚本,注释里写清楚每部分逻辑:

import keyboard
import time
import threading

# 标记脚本是否处于暂停状态
is_paused = False

def main_task():
    """脚本的核心持续运行任务"""
    count = 0
    while True:
        if not is_paused:
            print(f"脚本正在运行... 当前计数: {count}")
            count += 1
            time.sleep(1)  # 模拟任务的耗时操作
        time.sleep(0.1)  # 加个小延迟,避免占用过多CPU

def listen_space_key():
    """监听空格键,触发暂停/恢复逻辑"""
    global is_paused
    while True:
        # 监听空格键按下事件
        keyboard.wait('space')
        if not is_paused:
            print("\n空格键被按下,开始暂停20秒...")
            is_paused = True
            time.sleep(20)
            print("暂停结束,恢复运行!")
            is_paused = False
        else:
            # 如果已经在暂停中,按下空格可以提前恢复(可选逻辑)
            print("\n提前恢复运行!")
            is_paused = False

# 启动核心任务线程
threading.Thread(target=main_task, daemon=True).start()
# 启动键盘监听线程
listen_space_key()

代码说明:

  • 用多线程分开处理核心任务和键盘监听,这样两者不会互相阻塞
  • is_paused全局变量用来控制核心任务的运行状态
  • 空格键按下后,先标记暂停,等待20秒后自动恢复;如果暂停期间再按空格,还可以提前恢复(这个是可选的,你可以根据需求去掉)

方案2:使用标准库(无需第三方依赖)

如果不想安装第三方库,也可以用系统相关的标准库实现非阻塞监听:

Windows平台(使用msvcrt)

import msvcrt
import time

is_paused = False
count = 0

while True:
    if not is_paused:
        print(f"脚本正在运行... 当前计数: {count}")
        count += 1
        time.sleep(1)
    
    # 非阻塞检查键盘输入
    if msvcrt.kbhit():
        key = msvcrt.getch()
        # 空格键的ASCII码是32
        if key == b' ':
            if not is_paused:
                print("\n空格键被按下,开始暂停20秒...")
                is_paused = True
                time.sleep(20)
                print("暂停结束,恢复运行!")
                is_paused = False
            else:
                print("\n提前恢复运行!")
                is_paused = False
    time.sleep(0.1)

Linux/macOS平台(使用termios和sys)

import sys
import termios
import tty
import time

def get_key():
    """非阻塞获取键盘输入"""
    fd = sys.stdin.fileno()
    old_settings = termios.tcgetattr(fd)
    try:
        tty.setraw(sys.stdin.fileno())
        key = sys.stdin.read(1)
    finally:
        termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
    return key

is_paused = False
count = 0

while True:
    if not is_paused:
        print(f"脚本正在运行... 当前计数: {count}")
        count += 1
        time.sleep(1)
    
    # 检查是否有按键输入
    key = get_key()
    if key == ' ':
        if not is_paused:
            print("\n空格键被按下,开始暂停20秒...")
            is_paused = True
            time.sleep(20)
            print("暂停结束,恢复运行!")
            is_paused = False
        else:
            print("\n提前恢复运行!")
            is_paused = False
    time.sleep(0.1)

注意事项:

  • 标准库方案需要区分操作系统,跨平台性不如keyboard库
  • 标准库的非阻塞监听逻辑相对繁琐,适合不想安装第三方包的场景

内容的提问来源于stack exchange,提问作者Norbert Ignácz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:40:24