Ответ 1
os.environ
создается при импорте модуля os
и не отражает изменений в среде, которые происходят после этого, если они не изменены напрямую. Интересно, однако, что os.getenv()
фактически не получает самые последние переменные среды, по крайней мере, не в CPython. Видите ли, в CPython os.getenv()
, по-видимому, просто обертка вокруг os.environ.get()
(см. http://hg.python.org/cpython/file/6671c5039e15/Lib/os.py#l646). Поэтому основная причина использования os.getenv()
с указанной реализацией - это когда вы хотите вернуть значение по умолчанию, если имя переменной среды не найдено в os.environ
, а не KeyError
или что-то другое, и вы хотите сохранить несколько символов.
Вполне возможно, что реализация на FreeBSD имеет какой-то странный трюк, который заставляет его действовать по-другому, но я не уверен, почему это так. Посмотрите на копию os.py
на одной из машин FreeBSD, которые вы используете, если сможете.