Хоча функціональна різниця між 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']яких не є питанням.