04 - Python命令行输入时隐藏输入信息(常用于输入密码)

当python程序需要配置密码时,密码部分防止泄露,所以需要进行加密。

import msvcrt
def pwd_input():
    """
    输入信息加密
    """
    chars = []
    while True:
        try:
            newChar = msvcrt.getch().decode(encoding="utf-8")
        except:
            return input("你很可能不是在cmd命令行下运行,密码输入将不能隐藏:")
        # 换行 -- 输入结束
        if newChar in '\r\n': 
             break
        # 如果是退格,则删除密码末尾一位并且删除一个星号
        elif newChar == '\b': # 如果是退格,则删除密码末尾一位并且删除一个星号
             if chars:
                 del chars[-1]
                 # 光标回退一格
                 msvcrt.putch('\b'.encode(encoding='utf-8')) 
                 # 输出一个空格覆盖原来的星号
                 msvcrt.putch( ' '.encode(encoding='utf-8')) 
                 # 光标回退一格准备接受新的输入
                 msvcrt.putch('\b'.encode(encoding='utf-8')) 
        else:
            chars.append(newChar)
            # 命令行中显示为星号
            msvcrt.putch('*'.encode(encoding='utf-8')) 
    # 返回真实信息
    return (''.join(chars))

注:以上代码只适用于在命令行中运行输入,不支持在IDE中使用