2012-09-11 6 views
7

나는 게시 할 수없는 복잡한 소프트웨어가 없으며 구체적인 작업 예제도 가지고 있습니다. 나는 문제를 설명하려고 노력할 것이다. 아마도 누군가 전에 이것을 경험했을 것이다. 리눅스에 os.getenv는 올바른 값 대신 None을 반환합니다.

내가 환경 변수를 정의 쉘 :

> export MY_TEST_ENV=4711 
> echo $MY_TEST_ENV 
> 4711 

을 복잡한 코드 내에서 항상 None을 반환

print os.getenv('MY_TEST_ENV') 

로이 변수를 가져올. 이 동작을 테스트 할 테스트 스크립트를 만들면 다른 파일의 클래스를 사용하더라도 원하는 동작 (예 : os.getenv('MY_TEST_ENV'))이 올바른 값인 4711을 반환합니다.

코드는 'sudo'로 시작됩니다.

어떤 아이디어가 그럴 수 있습니까?

+1

어떻게이 "복잡한 코드"를 실행하고 있습니까? – geoffspear

+4

나머지 환경 변수는 여전히 있습니까? 파이썬 프로세스는 어떻게 시작됩니까? 'execve' 시스템 호출로 프로세스를 시작하고 환경 변수를 채우지 않으면, 자식 환경은 제로가됩니다. – alexis

+0

나는 나의 문제에 대한 해결책이 사소하다는 것을 알았다. 왜냐하면 나는 sudo로 파이썬 프로세스를 실행하기 때문에! 하지만 코드를 실행하는 방법을 묻기 전까지는이 솔루션을 보지 못했습니다. sudo가 없으면 변수가 표시됩니다 (그러나 나머지 코드는 작동하지 않습니다). – Alex

답변

4

대부분의 경우 파이썬 프로세스를 호출하면 환경을 상실하게됩니다. 실행중인 셸 내에서 변수를 내 보낸 다음 바로 그 쉘에서 문제의 파이썬 프로세스를 호출하면이 환경 변수를이 Python 프로세스에서 사용할 수 있습니다. 이 문제를 디버깅하는 데 도움이되는 질문 코드 (print os.getenv('my...')) 대신 print os.environ을 통해 전체 환경을 인쇄하십시오. 결과로부터 당신은 당신의 환경에 어떤 일이 일어 났는지를 추측 할 수 있어야합니다.

관련 문제