Я пытаюсь выяснить, как запросить пароль , а пользовательский ввод будет отображаться в виде звездочек ( ********
)
Недавно я взялся за проект создания удаленного сервера, к которому можно было бы подключиться с помощью сокета. модуль на питоне. Это еще не сделано, так как я занимаюсь созданием консоли, используемой для подключения к серверу.
Я пытаюсь создать окно входа в систему, в котором пользователю предлагается ввести свое имя пользователя и пароль, хотя при вводе пароля я ищу звездочки для печати, как обычный ввод пароля (например, 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, но * * * * * * остается эхом. Буду очень признателен за любую помощь в том, как стереть последнюю звездочку при вводе возврата. Также обратите внимание, что большая часть этого кода была из модуля getpass. Я знаю, что это не очень хорошее объяснение и, вероятно, не очень хороший код, но я все еще учусь - пожалуйста, потерпите меня.