如何实现按下回车键加速终端的逐字符慢速打印过程
实现方案
方案一:使用第三方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
相关产品推荐
相关产品推荐

