How to have password echoed as asterisks
echo, getch, msvcrt, passwords, python
Solution
You should be able to erase an asterisk by writing the characters `\x08 \x08`. The `\x08` will move the cursor back one position, the space will overwrite the asterisk, then the last `\x08` will move the cursor back again, putting it in the correct position to write the next `*`.
I don't know off the top of my head how to determine when a backspace is typed, but you can do that easily: just add something like `print repr(x)` after you've called `x = msvcrt.getch()`, then start your program and hit backspace.
Problem
I'm trying make a login window where a user is prompted to enter their Username and Password, although when the password is entered I am looking for asterisks to be printed, like common password entry (i.e. - Sekr3t is echo'd as: * * * * * *). Here's the code I have so far, and I can't figure out why it doesn't echo asterisks: ``` 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 ``` Any help would be appreciated.