从 stdin 读取密码

场景: 一个交互式 CLI Python 程序,需要密码。这也意味着,不可能有 GUI 解决方案。

在 bash 中,我可以获得一个读入的密码,而无需在屏幕上通过重新提示它

read -s

巨蟒也有类似的东西吗,

password = raw_input('Password: ', dont_print_statement_back_to_screen)

替代方案: 在将输入的字符发送回屏幕之前,用“ *”替换它们(也称为浏览器样式)。

77813 次浏览
>>> import getpass
>>> pw = getpass.getpass()

是的,getpass: “提示用户输入密码,但不回显。”

编辑: 我自己还没有使用过这个模块,所以下面是我刚刚编写的代码(如果你发现到处都是类似的代码,你也不会感到惊讶) :

import getpass


def login():
user = input("Username [%s]: " % getpass.getuser())
if not user:
user = getpass.getuser()


pprompt = lambda: (getpass.getpass(), getpass.getpass('Retype password: '))


p1, p2 = pprompt()
while p1 != p2:
print('Passwords do not match. Try again')
p1, p2 = pprompt()


return user, p1

(这是 Python3.x; 在使用 Python2.x 时使用 raw_input而不是 input。)