Наверняка вы замечали, что в 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
Want a new, affordable home near your parents/ nature/ the city? Say no more, fam! 😎
We’re developing new housing areas across the island to meet housing demand, including Chencharu in Yishun, Bayshore, Mount Pleasant, Keppel, and Pearl’s Hill. With a wide variety of flats being planned, there will be a home for every budget and every need. #COS2024
#COS2024 MSE announced initiatives that will help Singapore press on towards net zero, protect our coastlines, and ensuring Singapore’s food security and safety. More ⬆️
Infographics: MSE
At #COS2024, the Singapore Government Partnerships Office was launched to facilitate engagements with Singaporeans. MCCY will also continue to strengthen the culture of care in Singapore to support lower-income families and those in need.
Infographics: MCCY
Sports, and arts and heritage are integral to Singapore’s shared identity. MCCY announced at #COS2024 enhanced support and new developments to encourage a vibrant sporting and arts environment.
Infographics: MCCY
At #COS2024, MOH highlighted key efforts to improve preventive health and aged care, and to expand hospital capacity and settings to include mental health services. MediShield Life will also be enhanced to provide Singaporeans with greater assurance.
More info ⬆️
Infographics: MOH
#COS2024 Find out how MOT is enhancing our transport systems to improve inclusivity, connectivity and sustainability for our commute, and growing the industries for livelihoods. ⬆️
Infographics: MOT
Key housing initiatives introduced at #COS2024 include more homes in the pipeline to increase supply, increased support for young and lower-income families to own their home, and building of elder-friendly homes and neighbourhoods.
More info ⬆️
Infographics: MND
#COS2024 MND announced new initiatives that keep public housing affordable, rejuvenate heartlands, and create a sustainable and inclusive city. Check out the initiatives ⬆️
Infographics: MND
#COS2024 Ministry of Manpower will continue strengthening support for workers and businesses amid global economic uncertainties. These include uplifting older and lower-wage workers through changes to the CPF system, enhanced Workfare schemes, and introducing Tripartite Guidelines on Flexible Work Arrangement Requests for progressive workplaces. Find out more ⬆️
Infographics: MOM
At #COS2024, MOE introduced various initiatives that will help re-envision learning, helping all Singaporean students pursue their dreams. Find out more ⬆
Infographics: MOE
#COS2024 MCI announced its plans to invest in Singaporeans and local businesses to help them leverage emerging technologies to remain competitive.
Infographic: MCI