2010-01-03 4 views
0

, 많은 키를 출력,하지만 난 더 출력 예상 :os.environ은 어디에서 초기화 되었습니까? 이 코드를 사용하여

try: 
    environ 
except NameError: 
    environ = {} 

로부터 값을 가져 os.environ 수행합니다

import os 

for i in os.environ: 
    print i 

이 os.py에서 코드입니다 ? 초기화되는 위치는 어디입니까?

+1

이 질문은 매우 모호하게 보입니다. 당신이하려고하는 것에 대한 더 많은 정보와 당신이 가지고있는 이슈를 추가 할 수 있습니까? – avpx

+0

파이썬 소스 코드의 스 니펫을 포함하는 대신 (가장 손상되지 않았 음) 트레이스 백을 포함시킬 수 있습니다. – bernie

답변

7

os 모듈은 플랫폼 관련 하위 모듈 (예 : _nt 또는 _posix)에서 모든 이름을 가져온 다음 작은 정규화를 수행합니다. 분명히 environ 이름 (시스템 환경) 은 플랫폼 특정 하위 모듈에 의해 정의 된 (보통은 !!!으로 예상 됨)이므로 절이 os.py에 나타나지 않으며 os.environ은 풍부한 사전입니다 일반적으로 이라고 가정하면이됩니다.

3

os.py의 인용 부호는 백스톱입니다. 아무도 아직 environ 변수를 정의한 적이 없다면 빈 사전을 값으로 사용하여 변수를 만듭니다. 이 라인 (58)에까지이 더 수입 되었기 때문에

그러나 environ이 존재 :

from nt import * 

는 Windows 및 다른 플랫폼과 유사한 플랫폼 별 수입을 실행하는 경우. 따라서 실제로는 environ이 항상 존재하며 빈 dict backstop은 절대로 사용되지 않습니다.

그러면 왜 백스톱을 제공합니까? 이제는 핵심 파이썬 배포본에 의해 지원되는 모든 플랫폼이 적절한 environ 룩업을 구현하는 것을 볼 수 있기 때문에 실제 세계에서 모호한 유용성을 갖습니다. 그러나 환경 변수가없는 Python이 실행되는 비정상적인 플랫폼이 있거나 환경 변수와 같은 시스템 인터페이스가 실행되지 않을 때 많은 프로그램이 실행되지 않도록 새 플랫폼을 개발할 때 유용 할 수 있습니다 서면 아직.

관련 문제