2012-09-11 17 views
7

Tengo una pieza compleja de software que no puedo publicar, ni tengo un ejemplo concreto de trabajo. Trataré de explicar el problema, quizás alguien haya encontrado esto antes.os.getenv devuelve Ninguno en lugar de valor correcto

Por LINUX concha he definido una variable de entorno:

> export MY_TEST_ENV=4711 
> echo $MY_TEST_ENV 
> 4711 

Dentro del código complejo que quiero obtener esta variable con

print os.getenv('MY_TEST_ENV') 

que siempre vuelve None. Si creo un script de prueba para probar este comportamiento, incluso con clases en diferentes archivos, siempre obtengo el comportamiento deseado (es decir, os.getenv('MY_TEST_ENV') devuelve el valor correcto 4711).

El código se inicia como 'sudo'.

¿Alguna idea de cuál podría ser el motivo?

+1

¿Cómo está ejecutando este "código complejo"? – geoffspear

+4

¿El resto de las variables de entorno aún están allí? ¿Cómo se lanza el proceso Python? Si inicia un proceso con la llamada al sistema 'execve' y no completa _not_ la variable de entorno, el entorno del hijo se pone a cero. – alexis

+0

Sabía que la solución a mi problema es trivial, ¡porque ejecuto el proceso de python como sudo! Pero no he visto esta solución hasta que se me preguntó cómo ejecutar el código. Sin sudo, veo la variable (pero el resto del código no funcionará, sin embargo). – Alex

Respuesta

4

Lo más probable es que la forma en que invoque el proceso de Python le haga perder el entorno. Si exporta la variable dentro de un shell en ejecución y, directamente después de eso, invoca el proceso de Python en cuestión en el mismo shell, esta variable de entorno definitivamente debería estar disponible para este proceso de Python. Para ayudarlo a depurar este problema: en lugar del código en cuestión (print os.getenv('my...')), imprima todo el entorno a través del print os.environ. A partir del resultado, debe ser capaz de inferir lo que le sucedió a su entorno.

Cuestiones relacionadas