如何将密码回显为星号
我试图弄清楚如何提示输入密码,并让用户输入的内容以星号(********
)回显
所以最近,我进行了一个创建远程服务器的项目,该服务器可以使用Python中的套接字模块连接到该服务器。尚未完成,因为我正在制作用于连接服务器的控制台。
我正在尝试创建一个登录窗口,提示用户输入用户名和密码,尽管输入密码后,我正在寻找要打印的星号,例如普通密码输入(即-Sekr3t回显为: * *
)。
经过几天的研究,我几乎完成了,但是仍然有最后一个错误使我发疯(我完全无法解决)。注意-
我知道有一个getpass模块可以用来替换它,更加容易,但是没有任何echo并不是我要找的东西。
这是我到目前为止拥有的密码登录代码,我无法弄清为什么它不回显星号:
import msvcrt
import sys
def login(prompt = '> '):
write = sys.stdout.write
for x in prompt:
msvcrt.putch(x)
passw = ""
while 1:
x = msvcrt.getch()
if x == '\r' or x == '\n':
break
if x == '\b':
# position of my error
passw = passw[:-1]
else:
write('*')
passw = passw + x
msvcrt.putch('\r')
msvcrt.putch('\n')
return passw
如果您仔细阅读了代码和/或使用IDLE之类的代码,您可能会注意到,当用户使用退格键时,存储的数据将被删除一个字符,而不会打印出星号。即-Sekr3t
+退格键= Sekr3,但是 * *
被回显。我们非常感谢您在输入退格键后如何删除最后一个星号的任何帮助。还要注意,许多代码来自getpass模块。我知道这不是一个很好的解释,也许不是那么出色的代码,但我仍在学习中-
请多多包涵。