2009-11-19 3 views
167

시나리오 : 암호가 필요한 대화식 CLI Python 프로그램. 즉, 가능한 GUI 솔루션이 없음을 의미합니다. 배쉬에서stdin에서 암호 읽기

나는 암호가

read -s 

를 통해 화면에 다시 메시지를 표시하지 않고 읽어 얻을 수 파이썬 비슷한 뭔가가 있나요? 즉,

password = raw_input('Password: ', dont_print_statement_back_to_screen) 

대안 : 화면 (일명 브라우저의 스타일)로 다시 보내기 전에 '*'로 입력 된 문자를 교체합니다.

답변

259
>>> import getpass 
>>> pw = getpass.getpass() 
+2

그래, 배터리. ;-) 파이썬의 멋진 점 중 하나는 다른 언어, 특히 C 언어의 바이너리와 쉽게 바인딩 할 수 있다는 것입니다. 따라서 getpass()와 같은 기존의 많은 것들을 활용합니다. – mjv

+1

getpass() 는 CLI 도구가 STDIN을 통해 데이터를 제공 받고 있지만 사용자가 직접 암호를 입력 할 수있는 상황을 처리합니다. 훌륭한 도구! – Tiemen

+1

@Tiemen 그러나 암호를 내 스크립트에 연결 했는데도 getpass()가 여전히 암호를 기다리고 있기 때문에이 해결책을 찾고 있습니다. – Michael

50

예, 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이며 Python 2.x를 사용할 때는 input 대신 raw_input을 사용하십시오.)