【问题标题】:How to use getpass() to hide a users password as it is entered [duplicate]如何在输入时使用 getpass() 隐藏用户密码[重复]
【发布时间】:2017-11-07 20:47:04
【问题描述】:

我正在尝试制作一个检查用户密码强度的小程序。当提示用户输入密码时,我希望输入显示为星号或圆点,而不是文本输入。有没有办法隐藏这个输入。

我使用 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

【问题讨论】:

  • 这个问题可能会回答你的问题stackoverflow.com/questions/35805078/…
  • 这不是错误,而是警告。区别之一是警告信息丰富,但不具有破坏性。程序在发出警告后不会停止运行。似乎你所拥有的仍然可以工作;继续戳它。
  • 你在什么环境下运行这个程序?不管是什么,它都缺少getpass() 用来隐藏字符回显的一些功能。如果您从某种 IDE 内部运行代码,请尝试直接从命令行运行它。
  • 我可以使用 pyHook、pythoncom、sys 和 pysignal 模块制作自定义输入函数,你喜欢吗?
  • @jasonharper 仍然有同样的问题。我在 3.6.2 IDE 中运行它。我尝试在 shell 中运行它并出现相同的警告消息。

标签: python


【解决方案1】:

该警告基本上意味着您在 Python 无法使用常规交互式 IOCTL 调用来实现仅星号功能的环境中运行程序。从 IDE 内部运行程序基本上会导致 IDE 在伪终端中运行程序。请尝试在命令行上运行它。

【讨论】:

    【解决方案2】:

    getpass 模块包含一个getpass 函数,其工作方式与input() 类似,只是它关闭了终端回显。

    结果是输入的密码,您可以使用它来确定其强度或根据需要打印,但是当用户输入密码时,除了提示之外什么都不会打印。

    >>> from getpass import getpass
    >>> passwd = getpass('Please enter your password')
    Please enter your password
    >>> print passwd
    This is my password
    

    【讨论】:

    • 我尝试使用此代码,但收到错误消息(请参阅上面的编辑帖子)
    猜你喜欢
    • 2011-10-17
    • 2021-07-03
    • 2021-11-08
    • 2020-06-28
    • 1970-01-01
    • 2020-03-19
    • 1970-01-01
    • 2020-08-10
    相关资源
    最近更新 更多