Чтение и запись переменных окружения в Python

Переменные окружения используются для изменения конфигурации системы. Результат работы многих приложений на Python зависит от значений определённых переменных окружения. Когда эти переменные изменяются, для получения прежнего результата скрипт Python требует корректировок, а это нежелательно. Эту проблему можно решить, считывая и изменяя значения нужных нам переменных в самом скрипте.

Это избавит нас от необходимости исправлять переменные среды вручную и сделает код безопаснее: будут спрятаны конфиденциальные данные, которые требуется присвоить переменной окружения (например, токен API).

В этом уроке мы рассмотрим способы установки и получения таких переменных средствами языка Python.

Чтение переменных окружения на Python

Для начала потребуется импортировать модуль os, чтобы считывать переменные. Для доступа к переменным среды в Python используется объект os.environ. С его помощью программист может получить и изменить значения всех переменных среды. Далее мы рассмотрим различные способы чтения, проверки и присвоения значения переменной среды.

Считываем одну или все переменные окружения

Следующий код позволяет прочитать и вывести все переменные окружения, а также определенную переменную. Для вывода имен и значений всех переменных используется цикл for. Затем выводится значение переменной HOME.

# Импортируем модуль os
import os

# Создаём цикл, чтобы вывести все переменные среды
print("The keys and values of all environment variables:")
for key in os.environ:
    print(key, '=>', os.environ[key])

# Выводим значение одной переменной
print("The value of HOME is: ", os.environ['HOME'])

Результат:

После выполнения скрипта мы увидим следующий результат. Сперва был выведен список всех переменных окружения, а затем – значение переменной HOME.

Проверяем, присвоено ли значение переменной окружения

Давайте создадим Python-файл со следующим скриптом для проверки переменных. Для чтения значений переменных мы используем модуль os, а модуль sys — для прекращения работы приложения.

Бесконечный цикл while непрерывно принимает от пользователя имена переменных и проверяет их значения до тех пор, пока пользователь не введёт имя переменной, которой не присвоено значение.

Если пользователь вводит имя переменной окружения, которой присвоено значение, это значение выводится, если же нет — выводится соответствующее сообщение и процесс останавливается.

# Импортируем модуль os
import os
# Импортируем модуль sys
import sys

while True:
    # Принимаем имя переменной среды
    key_value = input("Enter the key of the environment variable:")

    # Проверяем, инициализирована ли переменная
    try:
        if os.environ[key_value]:
            print("The value of", key_value, " is ", os.environ[key_value])
    # Если переменной не присвоено значение, то ошибка
    except KeyError:
        print(key_value, 'environment variable is not set.')
        # Завершаем процесс выполнения скрипта
        sys.exit(1)

Результат:

На скрине вы видите результат работы скрипта. Первый раз было введено имя переменной, имеющей значение, а во второй раз — имя переменной, для которой значение не установлено. Согласно выводу, переменная HOME была инициализирована, и её значение вывелось в консоли. Переменной API_KEY не было задано значение, потому скрипт после вывода сообщения завершил работу.

Проверяем переменную на истинность

Создаём Python-файл со следующим кодом. Для проверки переменной DEBUG на истинность здесь используется функция get(). Программа выводит разные сообщения в зависимости от значения переменной.

# Импортируем модуль os
import os

# Проверяем значение переменной среды
if os.environ.get('DEBUG') == 'True':
    print('Debug mode is on')
else:
    print('Debug mode is off')

Результат:

На скрине показан результат работы кода, если значение переменной DEBUG – False. Значение переменной можно изменить с помощью функции setdefault(), которую мы разберём в следующем разделе.

Присваиваем значение переменной окружения

Для присвоения значения любой переменной среды используется функция setdefault().

Давайте напишем код, чтобы с помощью функции setdefault() изменить значение переменной DEBUG на True (по умолчанию установлено False). После установки значения мы проверим его функцией get().

Если мы сделали всё правильно, выведется сообщение «Режим отладки включен», в противном случае – «Режим отладки выключен».

# Импортируем модуль os
import os

# Задаём значение переменной DEBUG
os.environ.setdefault('DEBUG', 'True')

# Проверяем значение переменной 
if os.environ.get('DEBUG') == 'True':
    print('Debug mode is on')
else:
    print('Debug mode is off')

Результат:

Результат представлен ниже. Переменной DEBUG было присвоено значение True, и, соответственно, будет выведено сообщение «Режим отладки включен».

Заключение

Значения переменных окружения можно считывать и изменять при помощи объекта environ[] модуля os либо путем использования функций setdefault() и get().

В качестве ключа, по которому можно обратиться и получить либо присвоить значение переменной, в environ[] используется имя переменной окружения.

Функция get() используется для получения значения определённой переменной, а setdefault() – для инициализации.