Python 3中如何让input函数按回车后不换行?
解决input回车后不换行的问题
Python的input()函数本身会在用户按下回车后触发终端自动换行,这是终端的默认行为,无法通过input()的参数直接控制。要实现输入回车后不换行、直接在输入内容后追加[OK]的效果,可以用以下两种方法:
方法1:利用ANSI转义序列控制光标(推荐,适用于现代终端)
ANSI转义序列可以控制终端光标位置,输入完成后将光标移回上一行,重新拼接内容覆盖原有行:
prompt = 'Type the password and press "ENTER": ' psw = input(prompt) # \033[F 表示将光标移动到上一行开头 print(f'\033[F{prompt}{psw} [OK]')
说明:
\033[F是光标向上移动一行的ANSI转义码,执行后光标回到上一行开头;- 重新打印提示文本、输入内容和
[OK],覆盖原行内容,实现输入后不换行的效果; - 该方法兼容Linux、macOS终端及Windows Terminal(Windows 10及以上),旧版Windows cmd需先启用ANSI支持(可通过
pip install colorama后执行colorama.init()兼容)。
方法2:用sys.stdout手动控制输出与输入
通过sys.stdout.write()打印提示(不自动换行),结合sys.stdin.readline()读取输入,再精准调整光标位置:
import sys prompt = 'Type the password and press "ENTER": ' sys.stdout.write(prompt) sys.stdout.flush() # 强制输出缓冲区内容,避免提示延迟显示 psw = sys.stdin.readline().strip() # 读取输入并去除末尾换行符 # \033[F回到上一行,\033[{n}C向右移动n个字符到输入内容末尾 sys.stdout.write(f'\033[F\033[{len(prompt) + len(psw)}C [OK]\n')
说明:
sys.stdout.flush()必须调用,否则提示文本可能留在缓冲区,直到输入完成才显示;\033[{n}C用于将光标精准定位到输入内容的末尾,再打印[OK]。
内容的提问来源于stack exchange,提问作者TurboC
相关产品推荐
相关产品推荐

