Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+3

Код на python

Решил сделать запрос пароля в терминале более безопасным.
Сначала решил использовать библиотеку getpass, но она кривая и не показывает вводимый пароль вовсе.
Потом примкнул к sys и getch, результат уже есть, но захотелось сделать так, чтобы при вводе, число показывалось на 0.2 секунды, а только потом заменялось звёздочкой.

1
 import sys, getch, time 
1
 def get_password(prompt="Введите пароль: "): 
1
     print(prompt, end='', flush=True) 
1
     pwd = "" 
1
     while (ch := getch.getch()) not in '\r\n': 
1
         if ch in '\x08\x7f' and pwd: 
1
             pwd = pwd[:-1] 
1
             sys.stdout.write('\b \b') 
1
         else: 
1
             pwd += ch 
1
             sys.stdout.write(ch + '\b*') 
1
             sys.stdout.flush() 
1
             time.sleep(0.5) 
1
     print() 
1
     return pwd 
1
 print("Ваш пароль был успешно сохранен:", get_password()) 

Вроде должно работать, но "анимации" нету, что не так?

По дате
По рейтингу
Аватар пользователя
Мастер
9мес

Лови

123456789101112131415161718192021222324252627
 import sys 
import getch 
import time 
 
def get_password(prompt="Введите пароль: "): 
    print(prompt, end='', flush=True) 
    pwd = "" 
     
    while True: 
        ch = getch.getch() 
        if ch in '\r\n': 
            break 
        elif ch in '\x08\x7f': 
            if pwd: 
                pwd = pwd[:-1] 
                sys.stdout.write('\b \b') 
        else: 
            pwd += ch 
            sys.stdout.write(ch + '\b*') 
            sys.stdout.flush() 
            time.sleep(0.2) 
 
    print() 
    return pwd 
 
password = get_password() 
print("Ваш пароль был успешно сохранен:", password)