Ввод с клавиатуры без смещения каретки при вводе слова

возникла необходимость задать пароль в программе. Я использую 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)
→ Ссылка