環境変数への Python のアクセスは、プロセス環境に対するオペレーティング システムのビューを正確に反映していません。
os.getenv および os.environ は、特定のケースで期待どおりに機能しません。
実行中のプロセスの環境を適切に取得する方法はありますか?
私が言いたいことを示すために、2 つのほぼ同等のプログラム (最初は C で、もう 1 つは 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 秒ごとに「my value」を吐き出します。ただし、前述の python プログラムはそうではありません。
この場合、Python プログラムを C プログラムのように機能させる方法はありますか?
(はい、これは実行中のプロセスで実行する非常にあいまいで潜在的に損害を与えるアクションであることを認識しています)
また、私は現在python 2.4を使用していますが、これはpythonの新しいバージョンで修正されている可能性があります。