Доступ к переменным среды Python не точно отражает представление операционной системы в среде процессов.
os.getenv и os.environ не работают должным образом в определенных случаях.
Есть ли способ правильно получить среду запущенного процесса?
Чтобы продемонстрировать, что я имею в виду, возьмите две примерно эквивалентные программы (первая в C, другая в 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)
Теперь, если мы запустим программу C и приложим к запущенному процессу с помощью gdb и принудительно изменим среду под капотом, сделав что-то вроде этого:
(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"
то вышеупомянутая программа C начнет извергать "мое значение" каждые 5 секунд. Однако вышеупомянутая программа python не будет.
Есть ли способ заставить программу python функционировать как программа C в этом случае?
(Да, я понимаю, что это очень неявное и потенциально опасное действие для выполнения на запущенном процессе)
Кроме того, я в настоящее время использую python 2.4, это может быть исправлено в более поздней версии python.