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 中修复。