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 или из магии редактора, но я видел это открытым уже давно. А пока у меня есть два быстрых и грязных обходных пути:
Более общие - используйте базовый инструментарий графического интерфейса вашей системы с
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'""")
Быстрее, используя проводник переменных вашего редактора - объявите
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