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