Existe alguma diferença entre as duas abordagens?
>>> 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
Eles parecem ter exatamente a mesma funcionalidade.
python
environment-variables
python-os
André Staltz
fonte
fonte
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.os.environ.get()
vs,os.getenv()
mas o corpo também incluios.environ
vs.,os.environ.get()
portanto, essa resposta é correta de pelo menos algumas maneiras - incompleta, mas correta.Veja este tópico relacionado . Basicamente,
os.environ
é encontrado na importação eos.getenv
é um wrapper paraos.environ.get
, pelo menos no CPython.EDIT: Responder a um comentário, no CPython,
os.getenv
é basicamente um atalho paraos.environ.get
; desde queos.environ
é carregado na importação deos
, e somente então, o mesmo vale paraos.getenv
.fonte
os.getenv()
é quando [...] você deseja que um valor padrão seja retornado quando um nome de variável de ambiente não for encontrado nasos.environ
chaves de uma chave, em vez de ter umaKeyError
ou qualquer outra coisa lançada, e você deseja salvar alguns caracteres ".No Python 2.7 com o iPython:
Portanto, podemos concluir que
os.getenv
é apenas um invólucro simplesos.environ.get
.fonte
Embora não haja diferença funcional entre
os.environ.get
eos.getenv
, há uma enorme diferença entreos.putenv
e configurando entradasos.environ
.os.putenv
está quebrado , então você deve usar o padrãoos.environ.get
simplesmente para evitar o modo como oos.getenv
encoraja a usaros.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ésos.getenv
,os.environ
ou qualquer outra forma stdlib de inspecionar variáveis de ambiente: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 chamadaos.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.)fonte
Além das respostas acima:
fonte
os.getenv
é apenas um invólucro paraos.environ.get
, então estou recebendo uma sobrecarga mínima.usec
é um microssegundo emtimeit
. A diferença encontrada neste micro-avaliação comparativa foi 0,18 microssegundos ...