Хотя функциональных различий между 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:
>>> import os
>>> os.environ['asdf'] = 'fdsa'
>>> os.environ['asdf']
'fdsa'
>>> os.putenv('aaaa', 'bbbb')
>>> os.getenv('aaaa')
>>> os.environ.get('aaaa')
Вам, вероятно, придется сделать вызов ctypes на уровне C, getenv
чтобы увидеть реальные переменные окружения после вызова os.putenv
. (Запуск подпроцесса оболочки и запрос его переменных окружения также могут сработать, если вы очень осторожны с экранированием и --norc
/ --noprofile
или чем-то еще, что вам нужно сделать, чтобы избежать настройки при запуске, но кажется, что сделать это намного сложнее.)
os.environ.get()
какой возвратNone
(если не указано иное), и никогда не вызывает исключения, если env. вар. не существует Ваши запутанные вещи с использованиемos.environ['TERM']
которых не в чем вопрос.