从标准输入读取密码


180

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

在bash中,我无需重新输入密码即可在屏幕上输入密码

read -s

Python有类似的东西吗?即

password = raw_input('Password: ', dont_print_statement_back_to_screen)

替代方法:将键入的字符替换为“ *”,然后再将其发送回屏幕(又称浏览器样式)。

Answers:


280
>>> import getpass
>>> pw = getpass.getpass()

3
是的,他们是电池。;-) Python的优点之一是它能够轻松地与其他语言(尤其是C)的二进制文件绑定,因此可以利用很多现有的东西(例如getpass(),我相信)
mjv

2
更好的是,getpass()处理了以下情况:CLI工具正在通过STDIN馈送数据,但是您希望自己能够键入密码。很棒的工具!
铁门

2
@Tiemen,但我来这里寻求解决方案,因为即使我将密码通过管道传递给脚本,getpass()仍会提示我并等待密码
Michael

1
对我来说,getpass弹出了一个窗口(不是我想要的,也不是它的帮助说的),并且在我输入密码时不会掩盖密码!复制代码:import getpass; getpass.getpass()
Michael Grazebrook 2014年

1
但这不会显示“ *”作为一种类型。如何做到这一点?
杰森

53

是的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

(这是Python 3.x;使用raw_input而不是input使用Python2.x。)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.