Ввод с клавиатуры без смещения каретки при вводе слова
возникла необходимость задать пароль в программе. Я использую input(), но не хочу, чтобы при вводе с клавиатуры введённая надпись была видна на экране. Пример: Введите пароль:_
Не хочу использовать getpass.
Ответы (1 шт):
Автор решения: Shamus Rezol
→ Ссылка
Можно использовать msvcrt для обработки сырого ввода и \r для возврата в начало строки при выводе.
import msvcrt
SCREEN_CHAR = "*"
BACKSPACE = b"\x08"
password = str()
while True:
code = msvcrt.getch()
if msvcrt.kbhit() == True:
msvcrt.getch()
continue # F1, ..., F12, Ctrl + S, etc
ch = code.decode()
if ch in ("\r", "\n"):
# Завершаем ввод на ENTER
break
elif code == BACKSPACE:
# Удаляем последний символ
password = password[:-1]
# Убираем удаленный символ, сохраняем курсор на последнем введенном
print("\r", SCREEN_CHAR * len(password), " ", sep="", end="")
print("\r", SCREEN_CHAR * len(password), sep="", end="", flush=True)
continue
else:
password += ch
# Выводим введенный символ
print(SCREEN_CHAR, end="", flush=True)
print()
print("Password is '%s'" % password)