我正在使用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.
答案 0 :(得分:0)
使用带有此代码的普通终端:
import getpass
new_password=getpass.getpass(prompt="Type new password: ")
print(new_password)
可以正常工作,但如果我们尝试使用IDLE,我们会收到您在问题中公开的错误。
现在,如果我们查看文档here,您会看到这是预期的,它说:
注意如果从IDLE内部调用getpass,则可以输入 您从而不是空闲窗口启动IDLE的终端 本身。
答案 1 :(得分:0)
使用命令提示符作为管理员来运行此程序。
原因是因为stdin,stdout和stderr连接到/ dev / tty或其他PTY兼容设备的系统环境。
IDLE REPL不符合此要求。
如果您使用的是Windows操作系统或new_password=getpass.getpass(prompt="Type new password: ")
用于Linux发行版,请将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! Your are not allowed.")
根据Python文档:
getpass.getpass([prompt[, stream]])
提示用户输入密码而不回显。使用字符串提示提示用户,默认为“密码:'”。在Unix上,提示符被写入类文件对象流。 stream默认为控制终端(/ dev / tty)或者如果sys.stderr不可用(在Windows上忽略此参数)
在版本2.5中更改:添加了流参数。
注意:如果你从IDLE中调用getpass,输入可以在你启动IDLE的终端而不是空闲窗口本身完成。