2012-02-08 14 views
107

Bazı Sudo aygıtlarını denediğinizde Linux'ta parolayı girmeniz gerektiğini ve yazdığınız sırada terminal penceresinde hiçbir şey gösterilmediğini (parola gösterilmiyor) biliyorsunuzdur.Python'da komut satırı girişini alma

Python'da bunu yapmanın bir yolu var mı? Çok hassas bilgi gerektiren bir komut üzerinde çalışıyorum ve yazarken gizlenmesini istiyorum. Başka bir deyişle, şifreyi göstermeden kullanıcıdan şifre almak istiyorum.

cevap

171

getpass.getpass()'u kullanın.

+0

çalışacak her harfin Astrix yazdırılacaktır, ama nasıl bir senaryonun bir kopyasını yapmak ve daha sonra satırı yorum bir "korsan" nin dikkatli olabiliriz Bu kullanıcı şifresi gerektirir? – asf107

+81

@ asf107: Hacker kaynak kodunu düzenleyebilirse, endişelenmeniz gereken başka sorunlar da var. – DSM

+6

@ asf107 - Bir parola isteğinin ardındaki fikir, bir şeyle kimlik doğrulaması yapmak için iletebilmenizdir (IE, bunu bir çevrimiçi sunucuyla kimlik doğrulaması için parola istemek üzere kullanıyorum). Bir bilgisayar korsanı çizgiyi yorumladıysa, program artık başarısız olur, çünkü sunucu artık kimliği doğrulanmayacaktır. Getpass() 'ın kullanılmasının ardındaki fikir, kaynak kodlara bakıp şifrenizi sadece okuyarak kimsenin bulamayacağı ve hiç kimsenin şifrenizi sadece omzunuza bakıp şifrenizi ekrandan okuyarak okuyamayacağıdır. Bunu yazınız. – ArtOfWarfare

15

Bu amaç için getpass kullanın.

getpass.getpass - Bu Linux, Windows ve Mac üzerinde çalışır

76
import getpass 

pswd = getpass.getpass('Password:') 

yankılanan olmadan şifresini sor.

+1

Görünüşe göre bir işletim sistemi eklediğinden beri [yazarın adresi] (http://stackoverflow.com/review/suggested-edits/15845407), bu yazının Mac'te çalıştığından bahsedeceğim OS de. – JakeD

1
import getpass 
p=str("null") #user's input start value 
pas=str("password") #password value 
while p!=pas: 
    p=getpass.getpass("Insert your password: ") #password input 
print("ay") #when you get the password, the output is "ay" 
+8

[PEP 8] 'i (https://www.python.org/dev/peps/pep-0008/) –

2
import sys 
import msvcrt 

passwor = '' 
while True: 
    x = msvcrt.getch() 
    if x == '\r': 
     break 
    sys.stdout.write('*') 
    passwor +=x 

print '\n'+passwor 

bu kod yerine

+1

okumalısınız, bu sadece penceredir, fakat en azından 'getpass' cevabını tekrarlamamaktadır. İyi –