一、需求
从控制台输入密码时,密码变成*
二、分析
input()只能输入明文数据,无法实现变更输入数据成*。可通过msvcrt模块实现需求。
三、实现方式
"""方案二:将输入密码变成*号
msvcrt模块为Python提供许多直接与操作系统交互的方法,
getch()函数用于从控制台获取一个字符的输入
putch()函数用于将一个字符输出到控制台
"""
import msvcrt
# print(xx,flush=True),将内存中的数据直接显示在屏幕上
print('password: ', end='', flush=True)
# 以栈的形式存储输入的密码
li = []
while 1:
ch = msvcrt.getch()
#回车(enter)
if ch == b'\r':
msvcrt.putch(b'\n') # 相当于print()
print('输入的密码是:%s' % b''.join(li).decode())
break
# 退格(backspace)
elif ch == b'\x08':
if li:
li.pop() # 将栈中最后进来的元素退栈
msvcrt.putch(b'\b') # 输出一个退格(backspace),光标左移
msvcrt.putch(b' ') # 在光标位置输出空格
msvcrt.putch(b'\b') # 输出空格后,光标再进行一次左移
# #Esc 未生效
# elif ch == b'\x1b':
# break
else:
li.append(ch) # 将输入的字符入栈
msvcrt.putch(b'*') # 每入栈一个元素,将一个*字符输出到控制台
四、实现效果
五、简单实现密码隐藏操作
getpass模块实例——隐藏input()输入数据-CSDN博客
六、参考资料
python中flush=true_浅谈python print(xx, flush = True) 全网最清晰的解释-CSDN博客
Python中的msvcrt模块用法介绍_笔记大全_设计学院 (python100.com)
键盘按键与 ASCII 字符集对照表 (runoob.com)
python 常用转义字符对照表 键盘各键对应的ASCII码值_python转义字符表-CSDN博客
七、使用方法
补充下这个代码的使用方法,msvcrt这个包有些特殊,提供的很多方法是直接与内存进行交互,在开发工具中可能会出现无法正常使用的情况,建议从CMD终端启动脚本。
方法一:在CMD终端输入“python python脚本路径”,我本地的路径如下所示
python D:\Project\Python\Python_PhaseTwo\day05\test.py
方法二:打开脚本所在文件夹,启动终端执行脚本