这里有几个问题,但你在正确的轨道上!
试试这个:
import random
import getpass
password = "".join([chr(random.randint(33, 126)) for x in range(6)])
print("Your password is: {}".format(password))
pswd = getpass.getpass("Enter password: ")
if (pswd == password):
print("Access granted")
else:
print("Access denied")
首先,您需要使用"".join()"
而不是" ".join()
,除非您想在每个字符之间留一个空格。其次,您需要"".join()"
在定义的地方使用password
,因为它需要是一个字符串,相当于您希望用户输入的内容,而不是list
.
第三,参数 forgetpass.getpass()
是要求用户输入密码的提示,而不是密码本身。getpass()
不需要知道密码是什么;它只是帮助您在用户输入密码时隐藏输入回显。
getpass.getpass([提示[,流]])
提示用户输入密码而不回显。使用字符串提示符提示用户,默认为“密码:”。在 Unix 上,提示被写入类文件对象流。stream 默认为控制终端 ( /dev/tty
) 或者如果它不可用sys.stderr
(此参数在 Windows 上被忽略)。
编辑
您看到的红色错误是因为这个(来自getpass()
上面链接的手册页):
如果无回显输入不可用,则getpass()
回退到打印警告消息以流式传输并读取sys.stdin
和发出GetPassWarning
.
这很可能是 Windows 独有的问题,在 Linux / POSIX 环境下,输入将被隐藏。
要在 Windows 下修复此错误,getpass()
请尝试使用该msvcrt
模块。我没有要测试的 Windows 机器,但尝试import msvcrt
在 Python 提示符或脚本中运行,看看它是否有效,并在评论中发布您看到的任何错误。看起来只有在msvcrt
导入失败或sys.stdin
未按预期运行时,您才会在 Windows 下收到此错误。
此外,正如@Jasper Bryant-Greene在他的回答msvcrt
中所建议的那样,如果无法修复潜在问题,我们可以使用警告过滤器来隐藏警告:
import warnings
with warnings.catch_warnings():
warnings.simplefilter("ignore")
pswd = getpass.getpass("Enter password: ")