0

我正在使用 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.
4

2 回答 2

1

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

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

IDLE REPL 不满足此要求。

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

这肯定会帮助你:

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 的终端中完成的,而不是在空闲窗口本身中完成的。

于 2017-08-16T05:18:08.573 回答
0

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

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

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

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

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

于 2016-12-17T19:01:32.560 回答