【问题标题】:Trouble with masking password input in Python在 Python 中屏蔽密码输入的问题
【发布时间】:2017-04-30 20:26:08
【问题描述】:

我正在使用 Python。我正在制作一个脚本,用户必须在终端中输入密码。

我已经在这个网站上找到了使用 getpass 模块的解决方案。

new_password=getpass.getpass(prompt="Type new password: ")

问题是我收到警告,并且密码输入也会显示出来。

Warning (from warnings module):
  File "C:\Python34\lib\getpass.py", line 101
    return fallback_getpass(prompt, stream)
GetPassWarning: Can not control echo on the terminal.
Warning: Password input may be echoed.

【问题讨论】:

  • getpass.win_getpass() 寡妇用这个。
  • 很遗憾没有帮助
  • 你使用的是IDLE还是windows终端?
  • 我正在使用 IDLE
  • IDLE 与 stdout 和 stderr 有问题,尝试使用普通终端 question-1question-2

标签: python passwords getpass


【解决方案1】:

以管理员身份使用命令提示符运行此程序。

原因是标准输入、标准输出和标准错误连接到 /dev/tty 或其他 PTY 兼容设备的系统环境。

IDLE REPL 不满足此要求。

如果您使用的是 Windows 操作系统,请将 new_password=getpass.getpass(prompt="Type new password: ") 更改为 new_password=getpass.getpass("Type new password: "),或者将 new_password=getpass.getpass("Type new password: ", None) 更改为 Linux 发行版。

这肯定会帮助你:

import getpass
pw = getpass.getpass("Enter Your Password Here: ")
if pw == "password":
    print("You are Welcome...")
else:
    print("Sorry! You're are not allowed.")

根据 Python 文档:

getpass.getpass([prompt[, stream]])

提示用户输入密码而不回显。使用字符串提示符提示用户,默认为“密码:”。在 Unix 上,提示被写入类文件对象流。流默认为控制终端(/dev/tty),或者如果 sys.stderr 不可用(此参数在 Windows 上被忽略)

2.5 版更改:添加了流参数。

注意:如果您在 IDLE 中调用 getpass,输入可能在您启动 IDLE 的终端中完成,而不是在空闲窗口本身。

【讨论】:

    【解决方案2】:

    使用带有此代码的普通终端:

    import getpass
    new_password=getpass.getpass(prompt="Type new password: ")
    print(new_password)
    

    可以正常工作,但如果我们尝试使用 IDLE 进行相同操作,我们将收到您在问题中暴露的错误。

    现在,如果我们查看文档 here,您会发现这是有意的,它说:

    注意如果你在 IDLE 中调用 getpass,输入可能在 您启动 IDLE 的终端,而不是空闲窗口 自己。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-23
      • 2019-05-02
      • 1970-01-01
      • 2017-12-20
      • 1970-01-01
      • 2011-12-29
      • 2017-10-02
      相关资源
      最近更新 更多