我正在尝试使用getpass来隐藏输入,但它只是给了我这个错误:
“警告:QtConsole不支持密码模式,即您键入的文本 将是可见的。“
我正在使用Spyder。这是我的代码:
import getpass
pswd = getpass.getpass('Password:')
if pswd== 'whatever':
print ('\nACCESS GRANTED')
else:
print('\nACCESS DENITED')
答案 0 :(得分:3)
根据Carlos Cordoba(Spyder的开发人员)对duplicate but officially unanswered question的评论,您收到的警告是Spyder / QtConsole的限制,而不是getpass
。他建议在Spyder中使用外部终端:
[没有解决方法]将在Spyder中运行。您可以转到
Run > Configuration per file > Console
并选择名为Execute in an external terminal
的选项,以改为使用外部终端。
答案 1 :(得分:2)
我根据@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")
答案 2 :(得分:0)
我希望看到一个更好的答案,可以直接从API或编辑器魔术师访问它,但是我已经看到了很长时间了。同时,我有两个快速解决方法:
更一般-将系统的基本GUI工具箱与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