Mặc dù không có sự khác biệt về chức năng giữa os.environ.get
và os.getenv
, có một sự khác biệt lớn giữa os.putenv
và cài đặt các mục trên os.environ
. os.putenv
được chia nhỏ , vì vậy bạn nên mặc định os.environ.get
đơn giản để tránh đường os.getenv
khuyến khích bạn sử dụngos.putenv
cho đối xứng.
os.putenv
thay đổi các biến môi trường hệ điều hành cấp thực tế, nhưng theo một cách mà không hiển thị thông qua os.getenv
, os.environ
hoặc bất kỳ cách nào stdlib khác kiểm tra các biến môi trường:
>>> import os
>>> os.environ['asdf'] = 'fdsa'
>>> os.environ['asdf']
'fdsa'
>>> os.putenv('aaaa', 'bbbb')
>>> os.getenv('aaaa')
>>> os.environ.get('aaaa')
Bạn có thể phải thực hiện một cuộc gọi ctypes đến cấp độ C getenv
để xem các biến môi trường thực sau khi gọi os.putenv
. (Khởi chạy một quy trình con shell và yêu cầu nó cho các biến môi trường của nó cũng có thể hoạt động, nếu bạn rất cẩn thận về việc thoát và --norc
/ --noprofile
/ bất cứ điều gì khác bạn cần làm để tránh cấu hình khởi động, nhưng có vẻ khó hơn rất nhiều để làm đúng.)
os.environ.get()
trả vềNone
(trừ khi được chỉ định khác nhau) và không bao giờ đưa ra ngoại lệ nếu env. var. không tồn tại Những điều khó hiểu của bạn với việc sử dụngos.environ['TERM']
không phải là những gì câu hỏi là về.