Python 3.X实现输入固定底部、打印内容上滚的最简方案
终端底部固定输入框的纯Python实现
不用第三方库的话,直接利用终端的ANSI转义序列就能实现需求——通过控制光标位置,把输入框固定在终端最后一行,所有打印内容在上方区域输出。
核心思路
- 先在终端最后一行输出输入提示,固定光标在此处
- 自定义打印函数:每次打印前先保存光标位置,将光标移到输入框上方一行,清除该行原有内容后打印新消息,再把光标移回输入框的位置
- 直接通过
sys.stdin读取输入,避免input()自带的换行干扰
最简实现代码
import sys def bottom_print(content): # 保存当前光标位置(输入框所在行) sys.stdout.write("\033[s") # 光标上移1行,到输入框上方的打印区域 sys.stdout.write("\033[1A") # 清除当前行的内容,避免和输入提示重叠 sys.stdout.write("\033[K") # 打印内容 print(content) # 恢复光标到输入框所在行 sys.stdout.write("\033[u") sys.stdout.flush() # 初始化:在终端最后一行输出输入提示 input_prompt = "What is your name? " sys.stdout.write(input_prompt) sys.stdout.flush() # 模拟打印消息,内容会显示在输入框上方 bottom_print("hello world") bottom_print("welcome to this demo") # 获取用户输入 user_input = sys.stdin.readline().strip() # 打印输入结果 bottom_print(f"Hello, {user_input}!")
关键ANSI转义码说明
\033[s:保存当前光标位置\033[1A:将光标向上移动1行\033[K:清除光标所在行从光标位置到行尾的所有内容\033[u:恢复光标到之前保存的位置
注意事项
- 该实现依赖终端对ANSI转义序列的支持,现代终端(Linux/macOS终端、Windows Terminal、PowerShell)均兼容
- 若终端窗口大小动态调整,可能需要额外处理终端行数的更新,最简场景下可忽略此需求
内容的提问来源于stack exchange,提问作者user1135541
相关产品推荐
相关产品推荐

