Apakah ada perbedaan sama sekali antara kedua pendekatan?
>>> 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
Mereka tampaknya memiliki fungsi yang sama persis.
python
environment-variables
python-os
André Staltz
sumber
sumber
os.environ.get()
pengembalianNone
(kecuali ditentukan secara berbeda) dan tidak pernah menimbulkan pengecualian jika ENV. var. tidak ada. Hal-hal membingungkan Anda dengan menggunakanos.environ['TERM']
yang bukan tentang pertanyaannya.os.environ.get()
vsos.getenv()
tetapi tubuh juga mencakupos.environ
vsos.environ.get()
sehingga jawaban ini benar dalam setidaknya beberapa cara - tidak lengkap, tapi benar.Lihat utas terkait ini . Pada dasarnya,
os.environ
ditemukan pada impor, danos.getenv
merupakan pembungkus untukos.environ.get
, setidaknya dalam CPython.EDIT: Untuk menanggapi komentar, dalam CPython,
os.getenv
pada dasarnya adalah jalan pintas keos.environ.get
; karenaos.environ
dimuat saat imporos
, dan hanya kemudian, hal yang sama berlaku untukos.getenv
.sumber
os.getenv()
[...] adalah ketika Anda ingin mengembalikan nilai default ketika nama variabel lingkungan tidak ditemukan dios.environ
kunci daripada memilikiKeyError
atau apa pun yang dilemparkan, dan Anda ingin menyimpan beberapa karakter. "Dalam Python 2.7 dengan iPython:
Jadi bisa kita simpulkan
os.getenv
hanya pembungkus sederhana sajaos.environ.get
.sumber
Meskipun tidak ada perbedaan fungsional antara
os.environ.get
danos.getenv
, ada perbedaan besar antaraos.putenv
dan pengaturan entri aktifos.environ
.os.putenv
adalah rusak , sehingga Anda harus default untukos.environ.get
hanya untuk menghindari caraos.getenv
mendorong Anda untuk menggunakanos.putenv
untuk simetri.os.putenv
perubahan variabel lingkungan OS-tingkat yang sebenarnya, tetapi dengan cara yang tidak muncul melaluios.getenv
,os.environ
, atau cara stdlib lain memeriksa variabel lingkungan:Anda mungkin harus membuat panggilan ctypes ke tingkat-C
getenv
untuk melihat variabel lingkungan nyata setelah meneleponos.putenv
. (Meluncurkan subproses shell dan menanyakannya untuk variabel lingkungannya mungkin juga berfungsi, jika Anda sangat berhati-hati untuk melarikan diri dan--norc
/--noprofile
/ hal lain yang perlu Anda lakukan untuk menghindari konfigurasi startup, tetapi tampaknya jauh lebih sulit untuk memperbaikinya.)sumber
Selain jawaban di atas:
sumber
os.getenv
hanya pembungkusos.environ.get
, jadi saya mendapatkan overhead yang sangat minim.usec
adalah mikrodetik ditimeit
. Perbedaan yang ditemukan dalam pembandingan-mikro ini adalah 0,18 mikrodetik ...