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

如何实现按下回车键加速终端的逐字符慢速打印过程

实现方案

方案一:使用第三方keyboard库(跨平台推荐)

这个方案依赖keyboard库实现全局按键监听,跨平台兼容性好,操作简单。

步骤1:安装依赖

pip install keyboard

完整代码

import time
import keyboard
import threading

def tobyTalks(sentence):
    # 用可变列表存储skip状态,让线程能修改
    skip = [False]
    
    def listen_enter_key():
        # 监听回车键,按下后将skip设为True
        keyboard.wait('enter')
        skip[0] = True
        # 若需要支持「按回车切换加速/正常速度」,替换为以下循环:
        # while True:
        #     keyboard.wait('enter')
        #     skip[0] = not skip[0]
    
    # 启动守护线程监听按键,主程序结束后自动退出
    listener = threading.Thread(target=listen_enter_key, daemon=True)
    listener.start()
    
    for letter in sentence:
        print('\033[1;34m' + letter + '\033[0m', end='', flush=True)
        time.sleep(0.0001 if skip[0] else 0.05)

# 测试示例
if __name__ == "__main__":
    tobyTalks("这是一段测试文本,按下回车键即可加速打印速度!")

关键说明

  • 用线程监听按键:避免阻塞主打印循环,不影响原有的逐字符打印节奏。
  • 可变列表存skip:Python局部不可变变量无法被线程直接修改,用列表(可变对象)可以实现跨线程状态同步。
  • 守护线程:确保主打印任务结束后,监听线程自动终止,不会残留后台进程。

方案二:无第三方依赖(仅适用于Linux/macOS)

如果不想安装第三方库,可以用select模块实现非阻塞输入检查,但该方案在Windows系统下无效。

完整代码

import time
import sys
import select

def tobyTalks(sentence):
    skip = False
    for letter in sentence:
        print('\033[1;34m' + letter + '\033[0m', end='', flush=True)
        
        # 非阻塞检查是否有回车键输入
        ready, _, _ = select.select([sys.stdin], [], [], 0)
        if ready:
            sys.stdin.readline()  # 读取回车产生的换行符
            skip = True
        
        time.sleep(0.0001 if skip else 0.05)

# 测试示例
if __name__ == "__main__":
    tobyTalks("这是一段测试文本,按下回车键即可加速打印速度!")

关键说明

  • select.select实现非阻塞监听:超时时间设为0,不会阻塞打印循环。
  • 读取输入:按下回车键后,sys.stdin会产生换行符,用readline()清空输入缓冲区,避免后续循环重复触发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 11:13:15