Embora não haja diferença funcional entre os.environ.get
e os.getenv
, há uma enorme diferença entre os.putenv
e configurando entradas os.environ
. os.putenv
está quebrado , então você deve usar o padrão os.environ.get
simplesmente para evitar o modo como o os.getenv
encoraja a usar os.putenv
para simetria.
os.putenv
muda as variáveis reais do ambiente de nível de sistema operacional, mas de uma forma que não aparece através os.getenv
, os.environ
ou qualquer outra forma stdlib de inspecionar variáveis de ambiente:
>>> import os
>>> os.environ['asdf'] = 'fdsa'
>>> os.environ['asdf']
'fdsa'
>>> os.putenv('aaaa', 'bbbb')
>>> os.getenv('aaaa')
>>> os.environ.get('aaaa')
Você provavelmente teria que fazer uma chamada de ctypes para o nível C getenv
para ver as variáveis reais do ambiente após a chamada os.putenv
. (Iniciar um subprocesso de shell e solicitar suas variáveis de ambiente também pode funcionar, se você for muito cuidadoso com a fuga e --norc
/ --noprofile
/ qualquer outra coisa que você precise fazer para evitar a configuração de inicialização, mas parece muito mais difícil acertar.)
os.environ.get()
quais retornosNone
(a menos que especificado de forma diferente) e nunca gera uma exceção se o env. var. não existe. Suas coisas confusas com o usoos.environ['TERM']
não são do que se trata.