0

このコードを使用すると、多くのキーが出力されますが、出力は期待できませんでした。

import os

for i in os.environ:
    print  i

これはos.pyからのコードです:

try:
    environ
except NameError:
    environ = {}

os.environはどこから値を取得しますか?どこで初期化されますか?

4

2 に答える 2

7

osモジュールは、プラットフォーム固有のサブモジュール(_ntまたはなど)からすべての名前をインポートすることから始め、次に_posix少し正規化を行います。明らかに、environ名前(システム環境を表す)プラットフォーム固有のサブモジュールによって定義されたため(通常は期待されているように!!!)、のexceptos.pyトリガーされずos.environ、通常は豊富な辞書にすぎません。

于 2010-01-03T01:59:26.973 に答える
3

から引用されos.pyたコードはバックストップです。つまり、まだ誰も変数を定義していない場合はenviron、値として空の辞書を使用して変数を作成します。

しかしenviron、58行目でこれによってさらに上にインポートされているため、存在します。

from nt import *

Windowsを実行している場合、および他のプラットフォーム用の同様のプラットフォーム固有のインポート。したがって、実際environには常に存在し、空のdictバックストップが使用されることはありません。

Why bother provide a backstop then? Well, it's of dubious usefulness in the real world since as far as I can see all the platforms currently supported by the core Python distribution do implement a proper environ lookup. However there may be, or have been, unusual platforms where Python runs that do not have environment variables, and it may be of use when developing a new platform not to have a lot of programs fail to run when system interfaces like environment variables are not written yet.

于 2010-01-03T03:23:21.463 に答える