8

我正在尝试使用 getpass 隐藏输入,但它只是给了我这个错误:

“警告:QtConsole 不支持密码模式,您输入的文本将可见。”

我正在使用 Spyder。这是我的代码:

import getpass

pswd = getpass.getpass('Password:')

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

3 回答 3

4

根据 Carlos Cordoba(Spyder 的开发人员)对重复但官方未回答的问题的评论,您收到的警告是 Spyder/QtConsole 的限制,而不是getpass. 他建议在 Spyder 中使用外部终端:

[没有解决方法] 将在 Spyder 中运行。您可以转到Run > Configuration per file > Console并选择调用的选项Execute in an external terminal以改为使用外部终端。

于 2017-11-10T00:23:54.467 回答
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")
于 2020-12-31T16:37:06.820 回答
0

我很想看到一个更好的答案,可以直接从 API 或编辑器魔术中访问,但我已经看到这个打开了很长时间。与此同时,我有两个快速而肮脏的解决方法:

  1. 更通用 - 将系统的基本 GUI 工具包与subprocess. osascript是Mac版本。请评论/添加等效的 Windows 和 Linux hack:

    # 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
    
于 2020-03-30T00:48:11.273 回答