環境変数の対応リストを作る

Windows では os.environ[“HOME”] が例外になってしまった。
環境変数が違うようだ、Windows が用意しているのってどんなのがあるのだろう?
C++ では Windows SDK に個別取得する関数があるのであまり気にしていなかった。

今後のプログラム用に環境変数の対応リストが作りたい。

ということで environ のキーと値を書き出す簡易スクリプト。
Windows でも Linux でも動きます、一応 Windows 版は Python 3.0 で試した。
print でリダイレクトしたほうが今の私は早いけど Python だけでやってみよう。

#! /usr/bin/env python
# -*- coding: UTF-8 -*-

# 環境変数の書き出し

import os

keys = os.environ.keys()
result = ""
for key in keys:
	result += key + "\n" + os.environ[key] + "\n\n"

f = open("env.txt", "w")
f.write(result)
f.close()

ちなみに私の環境ではこうなった(合体しています)

env.txt

同じモンがありゃしねぇ、こりゃ環境変数を利用したコードの共有は無理だ。
どうでもいいけど Windows 用 Python での \n は CRLF になるんだね。

ちなみに IronPython では下記の要領で同じことができます。

# -*- coding: UTF-8 -*-

import System

# IronPython は clr なので \n では LF 固定になってしまう
nn = System.Environment.NewLine

# IDictionary が返る
dic = System.Environment.GetEnvironmentVariables()
result = ""
# DictionaryEntry に展開
for ent in dic:
	result += ent.Key + nn + ent.Value + nn + nn

sr = System.IO.StreamWriter("env.txt")
sr.Write(result)
sr.Close()

なんか Python らしくないコードだ、なんたって値取得に括弧が付いていない。
プロパティから取得する部分には当然括弧は付かないわけでこうなってしまう。
大文字が多いのはしかたがないが CPython コードとの見分けになると思えば…

#! /usr/bin/env python は言うまでもなく書いてはいけません。
つーか *.py は Windows での振り分けにはどうしよう?関連づけは CPython だし。

なんて解説をしているのでもう解ると思うけどこのコードは mono でも動きます。
Ubuntu 8.10 デフォルト状態でも IronPython 1.1.2 ならそのまま動かせる。

linux_ipy

とはいえ Linux で IronPython というのは凄く無駄を感じますけど。
動かせるとはいえ実用となると今後もビミョーとしか言いようがない。

一応書くと Mac は全然解りません。