Переменные среды обычно используются для значений конфигурации, таких как пути поиска, расположение файлов и т. д.
os.environ
,os.supports_bytes_environ
,os.environb
,os.getenv()
,os.getenvb()
,os.putenv()
,os.unsetenv()
,os.get_exec_path()
.os.environ
:Переменная os.environ
это объект сопоставления, подобный словарю, который представляет переменные среды окружения системы. Например, os.environ['HOME']
это путь к домашнему каталогу на некоторых платформах и эквивалентен getenv("HOME")
в языке C
.
Переменная os.environ
фиксируется при первом импорте модуля os
, во время запуска Python. Изменения в среде OS, сделанные после этого времени, не отражаются os.environ
, за исключением изменений, внесенных путем непосредственного изменения os.environ
.
Если платформа поддерживает функцию os.putenv()
, то сопоставление os.environ
может использовать ее для изменения среды. Функция os.putenv()
будет вызываться автоматически при изменении os.environ
.
Если платформа не поддерживает функцию os.putenv()
, то измененная копия сопоставления os.environ
может быть передана соответствующим функциям создания процессов, чтобы заставить дочерние процессы использовать измененную среду.
В Unix ключи и значения используют sys.getfilesystemencoding()
и обработчик ошибок 'surrogateescape'
. Если вы хотите использовать другую кодировку, то используйте os.environb
.
Заметка:
os.putenv()
, напрямую не изменят os.environ
, поэтому лучше менять значения ключей os.environ
.os.environ
может вызвать утечки памяти.Если платформа поддерживает функцию os.unsetenv()
, то с ее помощью можно удалить элементы в этом отображении os.environ
для сброса указанной переменной среды. Функция os.unsetenv()
будет вызываться автоматически при удалении элемента из os.environ
и при вызове одного из методов .pop() или .clear().
>>> import os >>> os.environ['LANG'] # 'ru_RU.UTF-8' >>> os.environ['HOME'] # '/home/docs-python' >>> os.environ['HOME'] = '/tmp' >>> os.environ.pop('HOME') # '/tmp' >>> os.environ.get('HOME', '/var/www') # '/var/www' # очистка среды окружения os.environ.clear() os.environ # environ({})
os.supports_bytes_environ
:os.supports_bytes_environ
производит проверку доступности функций модуля os.environb
и os.getenvb()
. Эти функции доступны только в том случае, если os.support_bytes_environ
равно True
. os.support_bytes_environ
истинно, если родной тип среды ОС - байты, например False
в Windows.
os.environb
:Байт-версия переменных сред окружения: представляет собой объект отображения, подобный словарю который представляет переменные среды окружения в виде байтовых строк. Environment и environmentb синхронизируются, изменяются обновления среды, и наоборот.
Окружение доступно только в том случае, если os.support_bytes_environ
равно True
.
os.getenv(key, default=None)
:Функция os.getenv()
возвращает значение ключа key
переменной среды, если оно существует или значение по умолчанию default
, если его нет. Значения key
, default
и возвращаемый результат - строки str
.
В Unix ключи и значения декодируются с помощью sys.getfilesystemencoding()
и обработчик ошибок 'surrogateescape'
. Используйте функцию os.getenvb()
, если хотите использовать другую кодировку.
Доступность: большинство систем Unix, Windows.
>>> import os >>> os.environ['HOME'] # '/home/docs-python' >>> os.getenv('TEST_ENV', '/tmp') # '/tmp'
os.getenvb(key, default=None)
:Функция os.getenvb()
возвращает значение ключа key
переменной среды, если оно существует или значение по умолчанию default
, если его нет. Значения key
, default
и возвращаемый результат - байтовые строки bytes
.
Функция os.getenvb()
доступна только в том случае, если os.support_bytes_environ
равно True.
Доступность: большинство Unix.
os.putenv(key, value)
:Функция os.putenv()
устанавливает переменную среды с именем key
в строковое значение value
. Такие изменения в переменной среде влияют на подпроцессы, запущенные с os.system(), os.popen()
или os.fork()
и os.execv()
.
Примечание. На некоторых платформах, включая FreeBSD
и Mac OS X
, настройка среды может привести к утечке памяти.
Важно. Если функция os.putenv()
поддерживается системой, то изменения для элементов в os.environ
автоматически переводятся в соответствующие вызовы os.putenv()
, однако самостоятельные вызовы os.putenv()
не обновляют значения в словаре os.environ
, поэтому предпочтительнее присваивать значения переменных сред элементам os.environ
.
Функция os.putenv()
вызывает событие аудита os.putenv
с аргументами key
, value
.
Изменено в Python 3.9: Функция теперь всегда доступна.
os.unsetenv(key)
:Функция os.unsetenv()
вызывает сброс (удаление) переменной среды окружения с именем key
. Такие изменения в переменной среде влияют на подпроцессы, запущенные с os.system(), os.popen()
или os.fork()
и os.execv()
.
Важно. Если функция os.unsetenv()
поддерживается системой, удаление элементов в os.environ
автоматически переводится в соответствующий вызов os.unsetenv()
, однако самостоятельные вызовы os.unsetenv()
не обновляют словарь os.environ
, поэтому удалять элементы в самом словаре os.environ
.
Функция os.unsetenv()
вызывает событие аудита os.unsetenv
с аргументом key
.
Изменено в Python 3.9: теперь эта функция доступна всегда, а также доступна в Windows.
os.get_exec_path(env=None)
:Функция os.get_exec_path()
возвращает список каталогов, в которых будет выполняться поиск исполняемого файла, аналогичного оболочке, например bash
, при запуске процесса. Аргумент env
, если он указан, должен быть словарем переменных среды для поиска в PATH
. По умолчанию, когда env
имеет значение None
, используется Environment системы.
>>> os.get_exec_path() # ['/home/docs-python/.local/bin', '/usr/local/sbin', # '/usr/local/bin', '/usr/sbin', '/usr/bin', '/sbin', # '/bin', '/usr/games', '/usr/local/games', '/snap/bin'] >>> os.get_exec_path({'PATH':'/usr/local/bin:/usr/sbin:/usr/bin:/sbin'}) ['/usr/local/bin', '/usr/sbin', '/usr/bin', '/sbin']