Lire le mot de passe de stdin

Scénario: un programme Python CLI interactif, qui a besoin d'un mot de passe. Cela signifie aussi qu'il n'y a pas de solution GUI possible.

Dans bash, je pourrais lire un mot de passe sans le demander à nouveau à l'écran via

read -s

Y a - t-il quelque chose de similaire pour Python? C'est-à-dire

password = raw_input('Password: ', dont_print_statement_back_to_screen)

Alternative: remplacez les caractères tapés par ' * 'avant de les renvoyer à l'écran (aka browser' style).

172
demandé sur BartoszKP 2009-11-19 11:25:58

2 réponses

>>> import getpass
>>> pw = getpass.getpass()
265
répondu mjv 2009-11-19 08:29:02

Oui, getpass: "demander à l'utilisateur un mot de passe sans faire écho."

Edit: Je n'avais pas encore joué avec ce module moi-même, donc c'est ce que je viens de concocter (Je ne serais pas surpris si vous trouvez du code similaire partout, cependant):

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

(Ceci est Python 3.x; utilisation raw_input au lieu de input lors de l'utilisation de Python 2.X.)

50
répondu Stephan202 2009-11-19 08:42:33