El acceso de Python a las variables de entorno no refleja con precisión la vista del sistema operativo del entorno de procesos.Variables de entorno en Python en Linux
os.getenv y os.environ no funcionan como se esperaba en casos particulares.
¿Hay alguna forma de obtener correctamente el entorno del proceso en ejecución?
Para demostrar lo que quiero decir, tomar los dos programas más o menos equivalentes (la primera en C, y el otro en Python):
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[]){
char *env;
for(;;){
env = getenv("SOME_VARIABLE");
if(env)
puts(env);
sleep(5);
}
}
import os
import time
while True:
env = os.getenv("SOME_VARIABLE")
if env is not None:
print env
time.sleep(5)
Ahora, si ejecutamos el programa C y lo conectamos al proceso en ejecución con gdb y cambiamos forzosamente el entorno bajo el capó haciendo algo como esto:
(gdb) print setenv("SOME_VARIABLE", "my value", 1)
[Switching to Thread -1208600896 (LWP 16163)]
$1 = 0
(gdb) print (char *)getenv("SOME_VARIABLE")
$2 = 0x8293126 "my value"
luego el citado programa C comenzará a arrojar "mi valor" una vez cada 5 segundos. El programa python antes mencionado, sin embargo, no lo hará.
¿Hay alguna manera de hacer que el programa python funcione como el programa C en este caso?
(Sí, me di cuenta que es una acción muy oscura y potencialmente perjudiciales para llevar a cabo en un proceso en ejecución)
Además, actualmente estoy usando Python 2.4, esto puede haber sido arreglado en una versión posterior de pitón .
Por lo que vale la pena, esto no es inesperado: la referencia de la biblioteca para el módulo os pone de relieve el tema. – bobince