我试图找出如何提示输入密码,并让用户输入回显星号( ********
)
所以最近,我承担了创建可以连接到使用在Python的插座模块的远程服务器的项目。 它尚未完成,因为我在做用于连接到服务器的控制台进程。
我试图让其中一个用户被提示输入自己的用户名和密码登录窗口,虽然在输入时密码是我期待的星号来打印,如常见的密码输入(即 - Sekr3t被回显为:* * * * * *)。
经过上研究天,我几乎做了,但仍存在是让我疯狂(我完全无法去解决它)最后的错误。 注 - 我知道有可能被用来替代这个,有很多更容易了一个getpass模块,但没有回显的不正是我要找的。
这里的密码登录代码我到目前为止,我想不通为什么它不显示星号:
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 + Backspace键= Sekr3,但* * * * * *是左回显。 如何擦除时退格enter'd最后一个星号的任何帮助,将不胜感激。 另外要注意,很多这样的代码来自getpass模块。 我知道这是不是很大的解释,而且可能不是很大的代码,但我仍然在学习 - 请多多包涵。