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