Проблема с маскировкой ввода пароля в Python

Я использую Python. Я делаю сценарий, где пользователь должен ввести пароль в терминале.

Я уже нашел решение на этом сайте с помощью модуля getpass.

new_password=getpass.getpass(prompt="Type new password: ")

Проблема в том, что я получаю предупреждение, и ввод пароля также отображается.

Warning (from warnings module):
  File "C:\Python34\lib\getpass.py", line 101
    return fallback_getpass(prompt, stream)
GetPassWarning: Can not control echo on the terminal.
Warning: Password input may be echoed.

2 ответа

Используйте командную строку от имени администратора для запуска этой программы.

Причина в том, что системная среда, в которой stdin, stdout и stderr подключены к /dev/tty или другому PTY-совместимому устройству.

IDLE REPL не соответствует этому требованию.

И изменить new_password=getpass.getpass(prompt="Type new password: ") в new_password=getpass.getpass("Type new password: ") если вы используете ОС Windows или new_password=getpass.getpass("Type new password: ",none) для дистрибутивов Linux.

Это поможет вам наверняка:

import getpass
pw=getpass.getpass("Enter Your Password Here: ")
if (pw=="password"):
    print ("You are Welcome...")
else:
    print ("Sorry! Your are not allowed.")

Согласно документации Python:

getpass.getpass([prompt[, stream]])

Запрашивать у пользователя пароль без повторения. Пользователю предлагается использовать строковое приглашение, которое по умолчанию имеет значение "Пароль:". В Unix приглашение записывается в поток файловоподобных объектов. поток по умолчанию используется для управляющего терминала (/dev/tty) или если он недоступен для sys.stderr (этот аргумент игнорируется в Windows)

Изменено в версии 2.5: был добавлен параметр потока.

Примечание. Если вы вызываете getpass изнутри IDLE, ввод может осуществляться с терминала, с которого вы запустили IDLE, а не с самого окна ожидания.

Используя обычный терминал с этим кодом:

import getpass
new_password=getpass.getpass(prompt="Type new password: ")
print(new_password)

Будет работать нормально, но если мы попробуем то же самое с IDLE, мы получим ошибку, которую вы выявили в своем вопросе.

Теперь, если мы посмотрим на документы здесь, вы увидите, что это предназначено, это говорит:

Замечание Если вы вызываете getpass изнутри IDLE, ввод может быть сделан в терминале, из которого вы запустили IDLE, а не в самом окне ожидания.

Другие вопросы по тегам