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

如何让Python 3中input()输入时不自动换行

解决方案

要实现多轮输入姓名且所有输入内容保持在同一行的效果,核心是通过ANSI终端控制序列调整光标位置并覆盖当前行内容,替代默认的换行行为。以下是修改后的代码:

import sys
import os

# 启用Windows终端的ANSI转义序列支持(如果是Windows系统)
if os.name == 'nt':
    os.system('')

done = False
custlog = []
prompt = "Enter a name (John D) or DONE\n----------\n"
print(prompt, end='')

while not done:
    # 读取输入并去除首尾空格,转为大写
    usrinput = input().strip().upper()
    
    if usrinput != "DONE":
        custlog.append(usrinput)
        # 1. 光标回到上一行开头;2. 清除当前行从光标到行尾的内容
        print("\033[F\033[K", end='')
        # 打印所有已输入的姓名,用空格分隔,不换行
        print(' '.join(custlog), end='')
        # 强制刷新输出缓冲区,确保内容立即显示
        sys.stdout.flush()
    else:
        # 输入DONE后,将其加入列表并最终打印整行
        custlog.append("Done")
        print("\033[F\033[K", end='')
        print(' '.join(custlog))
        done = True

print("----------\n#finish code")

关键逻辑说明

  • ANSI转义序列:\033[F 将光标移动到上一行开头,\033[K 清除光标到行尾的内容,实现对输入行的覆盖更新。
  • 列表维护输入内容:用custlog存储所有输入的姓名,每次新增后重新打印整行内容,确保所有输入在同一行显示。
  • 输出缓冲刷新:sys.stdout.flush() 避免终端缓冲导致的显示延迟,确保输入后立即更新行内容。

效果验证

运行后输入流程如下:

  1. 初始提示后,输入Adam B并回车,终端会在同一行显示Adam B,光标停在行尾等待下一次输入。
  2. 输入Bob D并回车,同一行更新为Adam B Bob D。
  3. 输入DONE并回车,行内容更新为Adam B Bob D Done,随后换行显示后续结束内容,完全符合期望效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 10:33:17