2014-08-29 2 views
0

나는 간단한 파이썬 스크립트 test.py이 : 나는 다른 사용자로 스크립트를 실행하려면다른 사용자 (sudo를)로 파이썬 스크립트를 실행하는 동안, 입력 문자열이 변수 이름으로 간주

x = input("Enter string") 
print("Entered str: ", x) 

을;

sudo -u scratch python test.py 

프로그램이 콘솔 입력을 기다립니다.

Enter stringTraceback (most recent call last): 
    File "test.py", line 1, in <module> 
    x = input("Enter string") 
    File "<string>", line 1, in <module> 
NameError: name 'abc' is not defined 

나는이 뒤에 이유와 그것을위한 수정 프로그램에 대한 확실하지 않다 : 나는 "ABC"를 입력하면, 다음과 같은 오류가 발생합니다.

답변

2

input은 Python 2.x 및 3.x에서 다르게 동작합니다. 다른 계정은 파이썬 2.x가 기본값으로 설정되어 있거나, PATH에 파이썬 2.x 실행 파일이 있습니다. 반면에 일반 계정은 Python 3.x 실행 파일을 사용합니다. 아마도 가장 좋은 방법은 스크립트의 "shebang"라인을 사용하려는 Python 실행 파일의 전체 경로를 사용하는 것입니다. 예를 들면 :

#!/usr/bin/python3 

(이 경로는 시스템에 조정해야 할 수도 있습니다 그것을 사용하고 무엇을보고 계정에 which python를 입력하십시오..) 문제는 코드를 파이썬 2.7 환경에서 input()를 사용하는이

1

(다른 사용자의 기본 파이썬 버전 일 가능성이 있습니다). 대신 raw_input()을 사용해보세요.

input()raw_input()으로 동작하고 exec()이 뒤 따르기 때문에 NameError이 발생합니다.

코드는 Python 3.x 인터프리터에서 제대로 실행됩니다.

+0

내 생각에 raw_input()이 python 3.x에서 제거되었습니다 (3.4에 없었습니다). 그러나 좋은 세부 사항. 감사! – yang5