Читать пароль от stdin - PullRequest
       17

Читать пароль от stdin

174 голосов
/ 19 ноября 2009

Сценарий: интерактивная программа CLI Python, для которой требуется пароль. Это также означает, что решение с графическим интерфейсом невозможно.

В bash я мог прочитать пароль без повторной подсказки на экране через

read -s

Есть ли что-то подобное для Python? То есть.,

password = raw_input('Password: ', dont_print_statement_back_to_screen)

Альтернатива: заменить напечатанные символы на «*» перед отправкой их обратно на экран (в стиле браузера).

Ответы [ 2 ]

273 голосов
/ 19 ноября 2009
>>> import getpass
>>> pw = getpass.getpass()
53 голосов
/ 19 ноября 2009

Да, 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 при использовании Python 2.x.)

...