Наверняка вы замечали, что в 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
Через тернии к звездам
Хочу с Вами поделиться постом моего знакого из Индийского космического агенства - ISRO. Намоню, недавно они успешно совершили посадку модуля на луне.
"Переполняясь гордостью и радостью, слезы катились из моих глаз, когда #Chandrayaan3 совершил точную посадку, творя историю!
Начав со скромной перевозки ракет и спутников на велосипедах и повозках, сегодня мы присоединяемся к элитному клубу, состоящему всего из 4х стран в мире, которые осуществили мягкую посадку на Луну и стали первой страной, совершившей посадку на Южном полюсе. И наше решение в разы дешевле, по сравнению с остальными странами. Переполненный гордостью индийца и глубоко вдохновленный непоколебимой стойкостью ISRO!"
HISTORY IN THE MAKING! 🚀
Chandrayaan-3 is set to make history as the world's first mission to achieve a soft landing near the lunar south pole 🌌
#Chandrayaan3
#MoonMission
इतिहास बनने जा रहा है! 🚀
चंद्रयान-3 चंद्रमा के दक्षिणी ध्रुव के पास सॉफ्ट लैंडिंग करने वाला दुनिया का पहला मिशन बनकर इतिहास रचने के लिए तैयार है।
#Chandrayaan3
#MoonMission
Following Chandrayaan 2's setback, PM Modi commended Team ISRO's dedication, promising imminent success. Today, that promise is fulfilled as #Chandrayaan3 achieves a triumphant lunar landing.
#IndiaOnTheMoon
India soars to new heights! 🚀🌕
Chandrayaan 3 takes flight, marking another remarkable milestone in our space exploration journey. A giant leap towards unravelling the mysteries of the moon and pushing the boundaries of scientific discovery.
#ISRO#Chandrayaan3#MoonMission
Chandrayaan 3's expedition unveiled
Tracing the remarkable journey from launch to lunar exploration, a story that propels us into the cosmos ✨🚀🌑
#Chandrayaan3#ISRO
#BestWishesChandrayaan3
आत्मनिर्भर भारत की ऊंची उड़ान।। 🚀🌛
चंद्रयान 3 की सफलतम उड़ान, हमारी अंतरिक्ष अन्वेषण यात्रा में एक और उल्लेखनीय मील का पत्थर साबित हुआ। चंद्रमा के रहस्यों को जानने और वैज्ञानिक खोज की सीमाओं को आगे बढ़ाने की दिशा में एक बड़ी छलांग।
#ISROTeam
#Chandrayaan3
#MoonMission
PM Narendra Modi shared exciting facts about the #Chandrayaan3MahaQuiz during his address.
Dive into the quiz on #MyGov and join the celebration of #Chandrayaan3's historic lunar landing.
Visit: https://isroquiz.mygov.in/
#ISROQuiz
#Chandrayaan
Ready to join the
#Chandrayaan3MahaQuiz but not sure how to start?
We've got you covered. Check out our video tutorial for step-by-step instructions on how to play the quiz and win exciting prizes.
Click here to join the quiz: https://isroquiz.mygov.in/
#MyGov#Chandrayaan3#MyGovQuiz#ChandrayaanQuiz
अपने संबोधन के दौरान प्रधानमंत्री नरेन्द्र मोदी ने #Chandrayaan3MahaQuiz के बारे में रोमांचक तथ्य साझा किए।
#MyGov पर क्विज़ में भाग लें और #Chandrayaan3 की ऐतिहासिक लैंडिंग के जश्न में शामिल हों।
विजिट करें: https://isroquiz.mygov.in/
#ISROQuiz
#Chandrayaan