Наверняка вы замечали, что в 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
🚀 The #Zealy sprint has officially begun! 🚀
It's time to dive into action as our thrilling sprint is now underway. With a fantastic prize pool of $5,000 + 500,000 Basalt tokens, this is a journey you won't want to miss 🎉
Join us and make your mark in this exciting sprint: https://zealy.io/c/basaltcoin/questboard💰
🚀 The future is green, and BasaltCoin is leading the way! Don't miss out on the opportunity to be part of the Greentech revolution. Invest with us and make a positive impact on our planet while growing your assets🌱
💰
Basalt presale 👉https://basaltcoin.com/sale
📦BasaltCoin✅️
🔥 Total Reward: $5,000 + 500,000 Basalt tokens
👑 The #Zealy sprint has officially begun! 🚀
🚧Rating: ⭐️⭐️⭐️⭐️⭐️
🎁Joining Link :https://zealy.io/c/basaltcoin/questboard
📔Information:
🚀The future is green, and BasaltCoin is leading the way! Don't miss out on the opportunity to be part of the Greentech revolution. Invest with us and make a positive impact on our planet while growing your assets🌱💰
🌐 Presale Link: https://basaltcoin.com/sale
🔴Note:Please do your own research (DYOR) before joining to any airdrops project, also airdrop is 100% free. Don't send any fee or penny for receiving airdrop token.
📦 HIPP Merch Giveway ✅
💲 Reward: 🔹1st 300 - $30
🔹 Next 700 - $20
🪙 Additional rewards: You'll also get the #BitgetPioneer role, extra #Zealy Sprint Points, and the chance to win an El Hippo x Bitget t-shirt!
🛡 Rating: ⭐⭐⭐⭐⭐
😀Airdrop Link:https://partner.bitget.com/bg/5WHE9P
=============================
✅Steps to Participate:
🔘Signup on Bitget withthis link
🔘 Make a deposit of $50 (a net deposit, meaning $50 more than your withdrawals) from November 21 - 28. Deposit cannot be from a CEX.
🔘 Provide yout Bitget UID on our Zealy quest.
=============================
👑Let's Go:https://zealy.io/c/elhippo/questboard
🖥Information:
💎Only transfers from non-CEX wallets are eligible.
💎 It's IMPORTANT to join #Bitget using our link.
💎If you have already registered at Bitget, you can still join the airdrop
😀Note:Please do your own research (DYOR) before joining to any project, also projects are 100% free. Don't send any fee or penny for receiving any token.
Introducing #Skrimples exciting new #airdrop campaign on #Zealy🔥🔥
https://zealy.io/c/skrimples/questboard
We have a massive prize pool of 1,000,000,000 $Skrimp tokens worth $4200 waiting for all the Zealy #ruffhouse hunters out there. 🔽🔽
Medium 🔉
#airdrop#giveaway#shib#pepeburn
👑HOMERUN #Giveaway IS LIVE - 500 USDT to grab👑
Homerun team would like to showcase our appreciation for all of you guys who have been providing great support which enables us to observe extraordinary development during the last couple of months 🚀
We would like to announce the Official #Giveaway event for all of you in our community
👉Prize Pool: $500 $USDT for participants
👉Finish all the tasks in Zealy and grab the USDT
👉Event time (21/08 - 29/08)
👉Join Zealy now: https://zealy.io/c/homerun/questboard/2312ddde-0986-4991-857b-875b4af2698d
#NFTGiveaway#Giveaway#AirdropCrypto#Airdrop#FreeMoney#Web3#USDT#USDTGiveaway#Zealy#QuestN