Şifreyi stdin'den okuyun


180

Senaryo: Parola gerektiren etkileşimli bir CLI Python programı. Bu ayrıca, GUI çözümü mümkün olmadığı anlamına gelir.

Bash'da ekranda tekrar sormadan bir parolayı okuyabilirim

read -s

Python için benzer bir şey var mı? yani,

password = raw_input('Password: ', dont_print_statement_back_to_screen)

Alternatif: Ekrana geri göndermeden önce yazılan karakterleri '*' ile değiştirin (tarayıcı tarzı olarak da bilinir).

Yanıtlar:


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

3
Evet, piller. ;-) Python ile harika bir şey, diğer C, özellikle C ikili ile kolayca bağlanma yeteneğidir, bu nedenle mevcut şeyler bir sürü (getpass (), sanırım)
kaldıraç

2
Daha da iyisi, getpass (), bir CLI aracının STDIN üzerinden veri beslendiği durumla ilgilenir ve yine de şifreyi kendiniz yazabilmek istersiniz. Harika bir araç!
Tiemen

2
@Tiemen ama buraya gelmek için bir çözüm aramaya geldim çünkü getpass () hala bana soruyor ve şifremi betiğime koyduğum halde bir şifre bekliyor
Michael

1
Benim için, getpass bir pencere açtım (ne istediğimi değil, ne yardımını söyledi) ve yazarken şifreyi gizlemedim! Çoğaltılacak kod: import getpass; getpass.getpass ()
Michael Grazebrook

1
ancak bu '*' türünü tek bir tür olarak göstermez. Kişi bunu nasıl başarır?
Jason

53

Evet getpass,: "Kullanıcıdan yankısız bir parola iste."

Düzenleme: Ben henüz bu modülle oynamamıştım, bu yüzden bu sadece pişirdiğim şey (her yerde benzer kod bulursanız şaşırmazsınız):

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

(Bu Python 3.x; Python 2.x kullanmak raw_inputyerine kullanın input.)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.