Доступ к переменным среды Python не точно отражает представление операционной системы о состоянии операционной системы.Переменные среды в Python для Linux
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, это может быть исправлено в более поздней версии питона ,
Для чего это стоит, это не является неожиданным: библиотека ссылки для модуля зева выдвигает на первый план проблему. – bobince 2008-10-24 22:35:50