python 키 입력 받는 함수; input, raw_input, getpass

Python 2008. 7. 13. 00:36
python builtin에는 두가지 키입력 처리 함수가 있다. input()과 raw_input()
둘다 공통적으로 한개의 문자열 인자를 사용할 수 있고, 이 인자가 키입력 프롬프트로 사용된다.

두 함수는 미묘한 차이점이 있으므로 용도에 따라 주의깊게 선택하여 사용해야 한다.
차이점은, raw_input()은 엔터키를 입력할때까지 입력된 "문자열"을 리턴하며, input()은 raw_input()이 받은 결과를 eval()한 결과와 같이 리턴한다는 점이다. 즉, input() == eval(raw_input())이 된다.

>>> ibuff=input('input?')
input?123
>>> ibuff
123
>>> ibuff=input('input?')
input?asdf

Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    ibuff=input('input?')
  File "<string>", line 1, in <module>
NameError: name 'asdf' is not defined

>>> ibuff=input('input?')
input?'asdf'
>>> ibuff
'asdf'
>>> rbuff=raw_input('raw_input?')
raw_input?1234
>>> rbuff
'1234'
>>> rbuff=raw_input('raw_input?')
raw_input?qwer
>>>
>>> rbuff
'qwer'

두 함수 모두 인자를 주지 않으면 아무 프롬프트(prompt)없이 입력을 무한정 기다린다.
그리고 아무 입력 없이 엔터키를 누르면 input()함수는 evaluation할 내용이 없는 것이 되므로 SyntaxError를 일으키지만 raw_input()은 그냥 엔터키를 누르면 빈 문자열을 리턴한다.

키보드로부터 입력받는 내용은 화면에 보이지 말아야 할 때가 있다.(echo off) 위의 두 함수는 이런 경우에 사용하기 까다롭다. 이럴땐 getpass module을 import해서 사용한다. getpass.getpass() 함수는 default prompt로 'Password: ' 가 설정되어 있다.

>>> import getpass
>>> pswd=getpass.getpass()
Password: (여기서 qwerasdf를 입력하지만 화면에는 보이지 않는다.)
>>> pswd
'qwerasdf'

getpass는 Windows에서는 잘 작동하지 않을 수도 있다.
: