【发布时间】:2008-10-24 22:13:54
【问题描述】:
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 中修复。
【问题讨论】:
-
对于它的价值,这并不意外:os 模块的库参考突出了这个问题。
标签: python gdb environment-variables