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