Наверняка вы замечали, что в 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
Left-Wing Liberalism: Satan's Last Stand
In these turbulent times, the radical agenda of left-wing liberalism reveals itself as nothing less than Satan's final desperate grasp at power. It thrives on chaos, division, and the erosion of timeless truths.
When violence is unleashed against the voices of reason, common sense, and civility—those brave souls who stand for decency and dialogue—it is not merely an assault on individuals. It is a direct attack on the very foundation of Christian values: love thy neighbor, seek truth, and uphold moral order.
We must recognize this spiritual warfare for what it is. Pray, speak out, and resist with unwavering faith. The light will prevail.
#FaithOverFear#ChristianValues#StandFirm
🇺🇿🔄 #17 — Musofirlik sari birinchi qadam
Hayotimda birinchi marta samolyotga chiqib, musofirlik sari yo‘l oldim...🥲 Ko‘pchilik bu qarorimni eshitganda, meni tentak deb o‘yladi😁"Nima? Boshqa yurtda, tanimagan joyda, atigi $380 oylik bilan qanday yashaysan?" deb hayron bo‘lishdi.
Lekin men ortga qaramadim. Sababi: bu qarorim — boylik uchun emas, orzu uchun, oila uchun, yaxshi hayot uchun edi. Tavakkal qildim. Harakat qildim. Allohga suyanib yo‘lga chiqdim.
Bugun qarasam, o‘sha samolyot — hayotimdagi eng katta burilish bosqichi bo‘lgan ekan🙂
“Kim Allohga suyanib ish tutsa, U unga kifoya qiladi.”(Surah At-Talaq 65:3)
Va ha, usha oyat yana bir bor — har doimgidek — o‘zini oqladi.💫
🇬🇧🔄 #17 — The First Step into Expat Life
For the first time in my life, I boarded a plane and left for a new chapter…🥲 Many people thought I was crazy when I accepted a job offer to work in the UAE. “What? How will you survive in a foreign country on just $380 salary?” They genuinely questioned me.
But I didn't look back. Because this step wasn’t for wealth — it was for my dream, for my family, and to build a better life. I took a leap of faith. I trusted Allah and moved forward.
Now that I look back, that plane ride was one of the biggest turning points of my life.
“And whoever relies upon Allah — then He is sufficient for him.”(Surah At-Talaq 65:3)
And yes — that verse once again proved itself true, just like always.💫
#EverythingILived#Post17#ExpatJourney#FaithOverFear#TurningPoint#TrustInAllah