Python で環境変数にアクセスする方法

  1. 環境変数とは
  2. Python の環境変数
  3. Python で環境変数を読み取る
  4. Python で環境変数を追加する

環境変数とは

環境変数は、Python プログラムの外部で値が割り当てられる変数です。 開発者は通常、Python 実行可能ファイルを呼び出す前にコマンドラインでそれらを設定します。 オペレーティングシステムは、これらの変数を内部から Python プログラムにアクセスできるようにします。

環境変数は、プログラムの柔軟性のために存在します。 この方法では、ユーザーはプログラムの実行前に特定のパラメーターを変更できます。 プログラムはこれらのパラメーターを調べてその動作を変更できます。 動的に。 コードを変更する必要はなく、このような環境変数の使用が呼び出されます プログラム構成。

Python の環境変数

環境変数を設定するメカニズムはプラットフォームに依存します。そのため、彼らは Python の組み込みの os モジュールで利用可能になります。 オペレーティングシステム依存機能。

Python ランタイムは、プログラムのすべての環境変数を辞書のように保持します os.environ オブジェクト。

Python ランタイムが os モジュールをロードすると、os.environ オブジェクトが生成されることに注意してください。 事後に環境変数を変更しようとすると (たとえば、ターミナルエミュレータで新しい環境変数をエクスポートすることにより)、 うまくいかないだろう。

Python で環境変数を読み取る

Python での環境変数へのアクセスは、辞書のような実行によって行われます os.environ オブジェクトの操作。

>>> import os
>>> os.environ
environ({'HOME': '/Users/john', 'LANG': 'en_US.UTF-8', 'LOGNAME': 'john', 'OLDPWD': '/Users/john', 'PATH': '/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin', 'PWD': '/Users/john/python-tutorial', 'SHELL': '/bin/zsh', 'TERM': 'screen', 'TERM_PROGRAM': 'Apple_Terminal', 'TERM_PROGRAM_VERSION': '433', 'TERM_SESSION_ID': 'CDC91EF3-15D6-41AD-A17B-E959D97BC4B5', 'TMPDIR': '/var/folders/md/31nwv67j113d19z0_1287f1r0000gn/T/', 'TMUX': '/private/tmp/tmux-501/default,3319,0', 'TMUX_PANE': '%28' , 'USER': 'john', '_': '/usr/local/bin/python3', '__PYVENV_LAUNCHER__': '/usr/local/bin/python3'})
>>> os.environ['HOME']
'/Users/john'
>>> os.environ['LANG']
'en_US.UTF-8'

下付きの [] 表記を使用して環境変数にアクセスし、その変数が未定義の場合、実行時エラーが発生します。

>>> os.environ['I_DONT_EXIST']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/Cellar/python/3.7.5/Frameworks/Python.framework/Versions/3.7/lib/python3.7/os.py", line 679, in __getitem__
    raise KeyError(key) from None
KeyError: 'I_DONT_EXIST'

この問題を回避するには、get() インターフェースを使用して os.environ オブジェクトから読み取ることができます。 検索された環境変数が定義されていない場合、get()None を返します。

>>> result = os.environ.get('I_DONT_EXIST')
>>> print(result)
None

get() インターフェースの便利な機能は、使用するデフォルト値を指定できることです 検索された環境変数が存在しない場合。

>>> os.environ.get('I_DONT_EXIST', 'I_AM_DEFAULT')
'I AM DEFAULT'

os.environ.get() の代わりに os.getenv() 関数を使用します。 両方の機能は同じように機能し、後者を便利な API として扱うことができます。

Python で環境変数を追加する

場合によっては、プログラム内から環境変数を変更または追加する必要があります。 たとえば、構成ネットワーク要求を受信したときにアプリケーションの動作を変更する必要がある場合に発生する可能性があります。 os.environ が標準の辞書であるかのように、添え字[]演算子を使用して環境変数を変更します。

>>> import os
>>> os.environ['LANG']
'en_US.UTF-8'
>>> os.environ['LANG'] = 'en_GB.UTF-8'
>>> os.environ['LANG']
'en_GB.UTF-8'

環境変数の値は文字列型である必要があることに注意してください。 整数またはその他の文字列以外の値を環境変数に割り当てようとすると、 実行時エラーが発生します。

>>> import os
>>> os.environ['LANG'] = 4
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/Cellar/python/3.7.5/Frameworks/Python.framework/Versions/3.7/lib/python3.7/os.py", line 684, in __setitem__
    value = self.encodevalue(value)
  File "/usr/local/Cellar/python/3.7.5/Frameworks/Python.framework/Versions/3.7/lib/python3.7/os.py", line 754, in encode
    raise TypeError("str expected, not %s" % type(value).__name__)
TypeError: str expected, not int
comments powered by Disqus