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

msvcrt.getch()后print无实时输出的Python密码输入问题

解决密码输入时星号实时显示的问题

我懂你遇到的这个糟心事——输入密码的时候,星号非要等你输完所有字符才一下子蹦出来,完全没达到实时反馈的效果对吧?其实这都是Python的输出缓冲在搞鬼,咱们分分钟就能搞定它。

问题根源

Python的标准输出默认是行缓冲模式:只有当输出内容里包含换行符(\n),或者缓冲区被填满时,才会把内容真正显示到控制台。你用print('*', end='')的时候,没有触发换行,所以每一个星号都被暂时存进了缓冲区,直到最后你打印\n的瞬间,才一次性把所有星号和后续内容刷出来。

两种解决方案

方法1:给print加flush=True参数

直接修改你的print语句,加上flush=True,告诉Python每次打印完立刻把内容输出到控制台:

import msvcrt

if __name__ == '__main__':
    string = ''
    ch = msvcrt.getch()
    while ch != b'\r':
        print('*', end='', flush=True)  # 关键改动:添加flush=True
        string += ch.decode('utf-8')
        ch = msvcrt.getch()
    print('\nEntered string is: ', string)

方法2:手动调用sys.stdout.flush()

要是不想改print的参数,也可以在每次打印星号后手动刷新输出缓冲区,记得先导入sys模块:

import msvcrt
import sys

if __name__ == '__main__':
    string = ''
    ch = msvcrt.getch()
    while ch != b'\r':
        print('*', end='')
        sys.stdout.flush()  # 手动刷新缓冲区
        string += ch.decode('utf-8')
        ch = msvcrt.getch()
    print('\nEntered string is: ', string)

两种方法都能实现你想要的效果:每输入一个字符,对应的星号就会立刻显示在屏幕上,完美模拟日常的密码输入体验。

内容的提问来源于stack exchange,提问作者Sreekar Mouli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:24:24