Есть ли разница между обоими подходами?
>>> os.getenv('TERM')
'xterm'
>>> os.environ.get('TERM')
'xterm'
>>> os.getenv('FOOBAR', "not found") == "not found"
True
>>> os.environ.get('FOOBAR', "not found") == "not found"
True
Кажется, они имеют одинаковую функциональность.
python
environment-variables
python-os
Андре Штальц
источник
источник
os.environ.get()
какой возвратNone
(если не указано иное), и никогда не вызывает исключения, если env. вар. не существует Ваши запутанные вещи с использованиемos.environ['TERM']
которых не в чем вопрос.os.environ.get()
против ,os.getenv()
но тело также включает в себяos.environ
vs.os.environ.get()
так что этот ответ правильный , по крайней мере , в некоторых отношениях - неполное, но правильный.Смотрите эту связанную тему . По сути,
os.environ
находится при импорте иos.getenv
является оберткойos.environ.get
, по крайней мере, в CPython.РЕДАКТИРОВАТЬ: ответить на комментарий, в CPython,
os.getenv
в основном ярлыкos.environ.get
; посколькуos.environ
загружается при импортеos
, и только тогда, то же самое верно дляos.getenv
.источник
os.getenv()
[...] - это когда вы хотите получить значение по умолчанию, возвращаемое, когда имя переменной среды не найдено вos.environ
ключах, а неKeyError
брошено или что-то еще, и вы хочу сохранить несколько символов. "В Python 2.7 с iPython:
Таким образом, мы можем сделать вывод
os.getenv
, что это простая оболочкаos.environ.get
.источник
Хотя функциональных различий между
os.environ.get
и нетos.getenv
, существует огромная разница междуos.putenv
настройками и включением записейos.environ
.os.putenv
будет нарушен , так что вы должны по умолчаниюos.environ.get
просто избегать путиos.getenv
побуждает вас использоватьos.putenv
для симметрии.os.putenv
изменяет фактические переменные окружения на уровне ОС, но таким образом, который не обнаруживаетсяos.getenv
,os.environ
или любым другим способом проверки переменных окружения в stdlib:Вам, вероятно, придется сделать вызов ctypes на уровне C,
getenv
чтобы увидеть реальные переменные окружения после вызоваos.putenv
. (Запуск подпроцесса оболочки и запрос его переменных окружения также могут сработать, если вы очень осторожны с экранированием и--norc
/--noprofile
или чем-то еще, что вам нужно сделать, чтобы избежать настройки при запуске, но кажется, что сделать это намного сложнее.)источник
В дополнение к ответам выше:
источник
os.getenv
это просто оболочка дляos.environ.get
, поэтому я получаю очень минимальные накладные расходы.usec
это микросекунда вtimeit
. Разница, обнаруженная в этом микро-бенчмаркинге, составила 0,18 микросекунд ...