Как сделать, чтобы пароль отображался в виде звездочек

Я пытаюсь выяснить, как запросить пароль , а пользовательский ввод будет отображаться в виде звездочек ( ********)

Недавно я взялся за проект создания удаленного сервера, к которому можно было бы подключиться с помощью сокета. модуль на питоне. Это еще не сделано, так как я занимаюсь созданием консоли, используемой для подключения к серверу.

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

8
задан Shahbaz 12 June 2012 в 16:01
поделиться