密码输入显示为*

import msvcrt, sys, os
print('password: ', end='', flush=True)

li = []

while 1:
    ch = msvcrt.getch()
    #回车
    if ch == b'\r':
        msvcrt.putch(b'\n')
        print('输入的密码是:%s' % b''.join(li).decode())
        break
    #退格
    elif ch == b'\x08':
        if li:
            li.pop()
            msvcrt.putch(b'\b')
            msvcrt.putch(b' ')
            msvcrt.putch(b'\b')
    #Esc
    elif ch == b'\x1b':
        break
    else:
        li.append(ch)
        msvcrt.putch(b'*')

os.system('pause')


def pwd_input(msg = ''):  
    import msvcrt, sys  
  
    if msg != '':  
        sys.stdout.write(msg)  
    chars = []  
    while True:  
        newChar = msvcrt.getch()  
        if newChar in '\3\r\n': # 如果是换行,Ctrl+C,则输入结束  
            print ''  
            if newChar in '\3': # 如果是Ctrl+C,则将输入清空,返回空字符串  
                chars = []  
            break  
        elif newChar == '\b': # 如果是退格,则删除末尾一位  
            if chars:  
                del chars[-1]  
                sys.stdout.write('\b \b') # 左移一位,用空格抹掉星号,再退格  
        else:  
            chars.append(newChar)  
            sys.stdout.write('*') # 显示为星号  
    return ''.join(chars)