Наверняка вы замечали, что в Python есть удобная функция для получения переменной окружения
os.getenv(NAME)
И её "сестра" для создания или изменения переменных окружения
os.putenv(NAME, VALUE)
Но почему-то putenv() не работает как должно. Энвайромент не обновляется!
os.putenv('MYVAR', '1')
print(os.getenv('MYVAR'))
... и ничего 😴
Почему так?
На самом деле энвайромент обновляется, но это значение не добавляется в словарь os.environ.
Откройте исходник функции os.getenv(). Это просто шорткат для os.environ.get()
В то время как putenv() это built-in С-функция.
Словарь os.environ (или точней класс из MutableMapping) создаётся из энвайромента в момент инициализации. Функция putenv() самостоятельно его не изменяет.
В тоже время, когда вы создаёте или изменяете ключ в os.environ, автоматически вызывается putenv() в методе __setitem__().
То есть, технически putenv() всё делает верно, но в os.environ это не отражается. Можно проверить так:
>>> os.putenv('MYVAR', '123')
>>> os.system('python -c "import os;print(os.getenv(\'MYVAR\'))"')
123
Я объявил переменную в текущем процессе и вызвал дочерний процесс, который её унаследовал и получил в составе os.environ.
Аналогично при удалении переменной вызывается еще одна built-in функция unsetenv(), удаляющая переменную из системы.
Итого
▫️ Удобней всего явно обновлять переменные через os.environ
▫️ Есть способ неявно создать/удалить переменную через putenv/unsetenv, что не повлияет на os.environ но изменит энвайромент и передаст изменения сабпроцессам. Но так лучше не делать!
▫️os.environ это просто обертка для built-in функций putenv() и unsetenv().
#basic
Higher temperatures, more wet and dry extremes, and accelerating increase in mean sea levels are projected for Singapore and Southeast Asia by the end of the century. Details of Singapore’s Third National Climate Change Study (V3) at go.gov.sg/V3
The choices we make today will determine our future climate. We need every individual to care for the environment as a way of life, in order to build a liveable and #SustainableSG. Find out how you can make a difference at www.mse.gov.sg/policies/climate-change/climategamechanger
Year-end celebrations are different this year, but that doesn’t mean we can’t make this one as special as the last. Let’s make this season of giving an unforgettable and meaningful one, by caring for the environment, yourself and your loved ones. #SustainableSGhttps://go.gov.sg/nea-year-end-advisory-2020
🎶 Ooooo~ This is an S.O.S.! 🎶
Good deals may be tempting but just because it’s on discount doesn’t mean you have to buy it.
Reduce food wastage during the upcoming year-end festivities:
✅ Plan your meals and prep a shopping list
✅ Order only what you can finish
✅ Transform leftovers into new dishes
#SayYEStoWasteLess#SustainableSG
Happy International E-waste Day!
Your old electronics aren’t just clutter. They’re filled with critical raw materials that can power our green future. ♻️
Drop them off at an e-waste bin. Let’s keep those precious materials in the loop!
#RecycleRight#SustainableSG
Ready for Bloobin's eco-party? Let’s see if your paper items make the cut!
Learn more about what can or cannot be recycled at go.gov.sg/towards-zero-waste.
#RecycleRight#SustainableSG
Bloobin's throwing the hottest eco-bash in town. Are your plastic items on the guest list or blacklist?
When unsure, check go.gov.sg/towards-zero-waste.
#RecycleRight#SustainableSG
Serving your guests special cookies and drinks this festive period? Don’t forget those cookie and drink containers can be recycled. For drink containers, get rewarded when you bring them to the nearest ‘Recycle N Save’ Reverse Vending Machine! ☺
You may also choose the ‘no reward’ option – just like 1 in 5 people who recycle with us! Saving our environment for our future generations is the greatest reward. More information at https://recyclensave.sg
#RecycleRight#SustainableSG
Our actions today impact our world tomorrow, and it is up to us to make it a better one. Together, let’s work #TowardsZeroWaste and build a #SustainableSG.
If you’re still not sure how to start, check out the activities and challenges at www.gogreen.gov.sg/programmes/
Donate items in good condition to others who need them most. Your pre-loved treasures could be someone else's gift!
For suggestions on donation channels, visit go.gov.sg/donate-resale-repair-channels
#TowardsZeroWaste#SayYEStoWasteLess#SustainableSG