Python对环境变量的访问不能准确反映操作系统对进程环境的看法。Linux上的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,这可能被固定在蟒蛇的更高版本。
对于它的价值,这并不令人意外:为os模块库参考突出的问题。 – bobince 2008-10-24 22:35:50