getpass не работает для spyder (Python)

Я пытаюсь использовать getpass, чтобы скрыть ввод, но он просто дает мне эту ошибку:

"Предупреждение: QtConsole не поддерживает режим пароля, введенный вами текст будет виден".

Я использую Spyder. Вот мой код:

import getpass

pswd = getpass.getpass('Password:')

if pswd== 'whatever':
   print ('\nACCESS GRANTED') 
else:
   print('\nACCESS DENITED')

3 ответа

Я пошел дальше и написал небольшой фрагмент ниже на основе комментария @Carlos Cordoba о том, что, поскольку Spyder основан на PyQt, у вас наверняка есть этот пакет :

      def prompt_password(user):
    """
    Parameters
    ----------
    user : user name

    Returns
    -------
    text : user input password
    """
    from PyQt5.QtWidgets import  QInputDialog, QLineEdit, QApplication
    from PyQt5.QtCore import QCoreApplication

    # Let's avoid to crash Qt-based dev environment (Spyder...)
    app = QCoreApplication.instance()
    if app is None:
        app = QApplication([])

    text, ok = QInputDialog.getText(
        None,
        "Credential",
        "user {}:".format(user),
        QLineEdit.Password)
    if ok and text:
        return text
    raise ValueError("Must specify a valid password")

Согласно комментарию Карлоса Кордобы (разработчика для Spyder) по поводу дублирующего, но официально оставшегося без ответа вопроса, предупреждение, которое вы получаете, является ограничением Spyder/QtConsole, а не getpass, Он предлагает использовать внешний терминал в Spyder:

[Нет обходного пути], который будет работать внутри Spyder. Ты можешь пойти в Run > Configuration per file > Console и выберите опцию под названием Execute in an external terminal вместо этого использовать внешний терминал.

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

  1. Более общие - используйте базовый инструментарий графического интерфейса вашей системы с subprocess. osascriptэто версия для Mac. Прокомментируйте / добавьте эквивалентные хаки для Windows и Linux:

    # great reference: https://scriptingosx.com/2018/08/user-interaction-from-bash-scripts/
    import subprocess
    subprocess.getoutput("""osascript -e 'display dialog "Who are you?" default answer "nobody" with hidden answer'""")
    
  2. Быстрее, используя проводник переменных вашего редактора - объявите temp переменную, отредактируйте ее в "Проводнике переменных", назначьте ее нужной переменной, затем del Это:

    temp = ''
    # now go to the Variable explorer window and change the value of foo to 'My secret'
    PASSWORD = temp # Spyder's Variable Explorer by default omits names that are all-uppercase 
    del temp
    
Другие вопросы по тегам