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

Python 3.X实现输入固定底部、打印内容上滚的最简方案

终端底部固定输入框的纯Python实现

不用第三方库的话,直接利用终端的ANSI转义序列就能实现需求——通过控制光标位置,把输入框固定在终端最后一行,所有打印内容在上方区域输出。

核心思路

  1. 先在终端最后一行输出输入提示,固定光标在此处
  2. 自定义打印函数:每次打印前先保存光标位置,将光标移到输入框上方一行,清除该行原有内容后打印新消息,再把光标移回输入框的位置
  3. 直接通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 18:40:32