나는 게시 할 수없는 복잡한 소프트웨어가 없으며 구체적인 작업 예제도 가지고 있습니다. 나는 문제를 설명하려고 노력할 것이다. 아마도 누군가 전에 이것을 경험했을 것이다. 리눅스에 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'로 시작됩니다.
어떤 아이디어가 그럴 수 있습니까?
어떻게이 "복잡한 코드"를 실행하고 있습니까? – geoffspear
나머지 환경 변수는 여전히 있습니까? 파이썬 프로세스는 어떻게 시작됩니까? 'execve' 시스템 호출로 프로세스를 시작하고 환경 변수를 채우지 않으면, 자식 환경은 제로가됩니다. – alexis
나는 나의 문제에 대한 해결책이 사소하다는 것을 알았다. 왜냐하면 나는 sudo로 파이썬 프로세스를 실행하기 때문에! 하지만 코드를 실행하는 방법을 묻기 전까지는이 솔루션을 보지 못했습니다. sudo가 없으면 변수가 표시됩니다 (그러나 나머지 코드는 작동하지 않습니다). – Alex