Как использовать getpass(), чтобы скрыть пароль пользователя при его вводе

Я пытаюсь сделать небольшую программу, которая проверяет надежность пароля пользователя. Когда пользователю предлагается ввести свой пароль, я хочу, чтобы ввод отображался в виде звездочек или точек вместо ввода текста. Есть ли способ скрыть этот ввод.

Я использовал getpass, чтобы попытаться скрыть ввод без успеха.

    from getpass import getpass
    passwd = getpass('Please enter your password')

Это дает мне следующее предупреждающее сообщение:

Предупреждение (из модуля предупреждений): Файл «C:\Program Files (x86)\Python36-32\lib\getpass.py», строка 100 возвращает fallback_getpass (приглашение, поток) GetPassWarning: невозможно управлять эхом на терминале. Предупреждение: ввод пароля может быть отражен. Пожалуйста, введите ваш пароль: this_is_my_password

Пароль вводится в строке, но вместо звездочек выводятся исходные символы.

Поскольку программа будет проверять надежность пароля, мне нужно что-то, что сохраняет пароль не в виде звездочек, а в виде его исходных символов.

Кроме того, есть ли способ включить способ отображения пароля пользователя, если он выполняет действие. Я рассматривал возможность использования кнопки, но это область Python, в которой я не уверен, поэтому могу ли я программировать по-другому с определенной клавишей.

Код Sudo для проекта.

userPass = hidden(input("Please enter your password "))
if showPassword selected:
    show the password
else:
    move on with the rest of the program

person Jake Symons    schedule 07.11.2017    source источник
comment
Этот вопрос может ответить на ваш вопрос title="как преобразовать пароль в звездочки во время его ввода"> stackoverflow.com/questions/35805078/   -  person dangee1705    schedule 07.11.2017
comment
Это не ошибка, это предупреждение. Одно из отличий состоит в том, что предупреждения носят информационный, но не разрушительный характер; программа не прекращает работу после предупреждения. Похоже, то, что у вас есть, все еще может работать; продолжай тыкать в него.   -  person Eric Ed Lohmar    schedule 08.11.2017
comment
В какой среде вы запускаете эту программу? Что бы это ни было, в нем отсутствует какая-то функция, которую getpass() использует, чтобы скрыть эхо символов. Если вы запускаете код из какой-либо IDE, попробуйте вместо этого запустить его непосредственно из командной строки.   -  person jasonharper    schedule 08.11.2017
comment
Я могу настроить функцию ввода с помощью модулей pyHook, pythoncom, sys и pysignal, вам это нравится или нет?   -  person DRPK    schedule 08.11.2017
comment
@jasonharper У меня все те же проблемы. Я запускаю это в 3.6.2 IDE. Я попытался запустить его в оболочке, и появляются те же предупреждающие сообщения.   -  person Jake Symons    schedule 08.11.2017


Ответы (2)


Предупреждение в основном означает, что вы запускаете свою программу в среде, где Python не может использовать обычные интерактивные вызовы IOCTL для реализации функций только со звездочками. Запуск программы из вашей IDE в основном приводит к тому, что IDE запускает программу в псевдотерминале. Вместо этого попробуйте запустить его в командной строке.

person tripleee    schedule 13.11.2017

Модуль getpass содержит функцию getpass, которая работает точно так же, как input(), за исключением того, что она отключает эхо терминала.

Результатом является введенный пароль, который вы можете использовать для определения его надежности или распечатать по мере необходимости, но пока пользователь вводит свой пароль, ничего не печатается, кроме подсказки.

>>> from getpass import getpass
>>> passwd = getpass('Please enter your password')
Please enter your password
>>> print passwd
This is my password
person 3Doubloons    schedule 07.11.2017
comment
Я пытался использовать этот код, но получил сообщение об ошибке (см. отредактированный пост выше) - person Jake Symons; 08.11.2017