TL; DR
input
Python 2.7의 함수는 입력 한 내용을 Python 표현식으로 평가합니다. 단순히 문자열을 읽으려면 raw_input
Python 2.7에서 함수 를 사용하십시오.이 기능은 읽은 문자열을 평가하지 않습니다.
Python 3.x를 사용하는 경우 raw_input
이름이로 변경되었습니다 input
. 파이썬 3.0 릴리스 노트 인용 ,
raw_input()
로 이름이 변경되었습니다 input()
. 즉, 새 input()
함수는 줄을 읽고 sys.stdin
후행 줄 바꿈을 제거한 상태로 반환합니다. 이 제기 EOFError
입력이 조기 종료되는 경우. 의 이전 동작 얻으려면 input()
, 사용eval(input())
Python 2.7 에는 사용자 입력을 받아들이는 데 사용할 수있는 두 가지 함수가 있습니다. 하나는 input
다른 하나는 raw_input
입니다. 당신은 다음과 같이 그들 사이의 관계를 생각할 수 있습니다
input = eval(raw_input)
이 코드를 더 잘 이해하려면 다음 코드를 고려하십시오.
>>> dude = "thefourtheye"
>>> input_variable = input("Enter your name: ")
Enter your name: dude
>>> input_variable
'thefourtheye'
input
사용자로부터 문자열을 받아 현재 Python 컨텍스트에서 문자열을 평가합니다. 입력 dude
으로 입력 dude
하면 값에 바인딩되어 thefourtheye
평가 결과가 thefourtheye
되고에 할당됩니다 input_variable
.
현재 파이썬 컨텍스트에없는 다른 것을 입력하면 실패합니다 NameError
.
>>> input("Enter your name: ")
Enter your name: dummy
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "<string>", line 1, in <module>
NameError: name 'dummy' is not defined
Python 2.7의 보안 고려 사항 input
:
모든 사용자 유형이 평가되므로 보안 문제도 부과됩니다. 예를 들어, os
프로그램을 사용하여 이미 모듈을 로드 import os
한 다음 사용자는
os.remove("/etc/hosts")
이것은 파이썬에 의해 함수 호출 표현식으로 평가되어 실행될 것입니다. 높은 권한으로 Python을 실행하면 /etc/hosts
파일이 삭제됩니다. 얼마나 위험한가요?
이를 설명하기 위해 input
함수를 다시 실행 해 봅시다 .
>>> dude = "thefourtheye"
>>> input("Enter your name: ")
Enter your name: input("Enter your name again: ")
Enter your name again: dude
이제 input("Enter your name: ")
실행되면 사용자 입력을 기다리며 사용자 입력은 유효한 Python 함수 호출이므로 호출됩니다. 그래서 우리는 Enter your name again:
다시 프롬프트를 보게 됩니다.
따라서 다음 raw_input
과 같은 기능 을 사용하는 것이 좋습니다.
input_variable = raw_input("Enter your name: ")
결과를 다른 유형으로 변환해야하는 경우 적절한 함수를 사용하여에서 반환 된 문자열을 변환 할 수 있습니다 raw_input
. 예를 들어 입력을 정수로 읽으려면 이 답변에int
표시된 대로 함수를 사용하십시오. .
python 3.x 에는 사용자 입력을 얻는 함수가 하나 뿐이며 input
, 이는 Python 2.7과 동일합니다 raw_input
.
input
이런 식으로 행동 할 것으로 기대 하지만 2.7에서만 가능합니다.python --version
명령 프롬프트에서 실행할 때 무엇을 말 합니까? 또는import sys; print(sys.version)
스크립트 시작 부분에 글을 쓰면 어떻게됩니까?