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