subprocess.Popen
で起動された小さなPythonアプリケーションがあり、環境変数の形でいくつかのパラメータが必要です。私は、環境構造をPopen
コールに渡すことによってこれを行います。プログラムはos.getenv
を介して変数を読み込みます。os.environ ['foo']はいつos.getenv( 'foo')にマッチしませんか?
むしろ、それはそうした方法で読んでいました。 Windowsでは、正常に動作しました。しかし、私たちのFreeBSDサーバ、os.getenv
戻り我々は、渡されたすべてのパラメータのNone
。上の奇妙な部分はos.environ
は、単に両方のプラットフォームでうまくos.environ['foo']
作られたすべての作品へのすべてのos.getenv('foo')
のコールを切り替え、確かに、ちょうど—罰金や価値観を持っているということです。
これらの値が異なるのはなぜですか?どちらが適切なのですか?
Windows 10では、 'os.putenv( 'abc'、 '123')'は機能しませんでした。つまり、新しい変数が設定されていません。しかし、 'os.environ ['abc'] = '123''が動作し、' os.getenv(' abc ') 'も同様に動作します。 –
@arvindpdmnもう一度調べてみると、 'putenv()'は実際に 'os.environ'に環境変数を格納していないからです。 'environ .__ setitem __()'は 'putenv()'を呼び出し、データをローカルに保存します。 'getenv()'や 'environ .__ getitem __()'は実際に環境自身に問い合わせるのではなく、 .environ'が保存されています。それを実装するための非常に混乱する方法。 – JAB