Наверняка вы замечали, что в 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 GUCARD CHAMPIONS’ LEAGUE BEGINS! 🔼
GuCard is officially LIVE for our first whitelist users! 🎉 Congratulations to those who are among the first to experience the future of payments!
Now it’s time to show the world how GuCard works in real life! 🌍💵
🎥 How to Join:
1️⃣Create a video showcasing how you use your GuCard in everyday transactions.
2️⃣ Post it on X and tag @Gumart__.
3️⃣ Use #GuCard to spread the word!
🏆 BIG PRIZES (Top 3 Winners): $5,000in total (loaded directly onto your GuCard!)
🗓Contest period:Feb 16 – Feb 28
Be creative, be bold, and let’s show the world the power of GuCard! 💳
📦 GUCARD CHAMPIONSHIP EXTENDED – MORE TIME, MORE REWARDS! ⚡️
Due to the incredible response, we’re extending the GuCard Champions League until March 22! ✨
That means more chances to win BIG while showcasing how you use GuCard in real life!
🎥 How to Join:
1️⃣ Create a video showing how you use your GuCard for everyday payments.
2️⃣ Post it on X and tag @Gumart_Official.
3️⃣ Use #GuCard to spread the word!
🏆 BIG PRIZES – NOW EXTENDED!
💰 Top 3 Winners: $5,000 in total (loaded directly onto your GuCard!)
🗓 New Deadline: March 22
More time, more winners, and even more ways to showcase GuCard’s power! 💳
#GuMinigame
✨🥳 GUCARD CREATIVE CONTEST IS HERE! 🥳✨
Are you ready to show off your creativity and love for Gumart? 💸 Join the Gucard Creative Contest and turn your ideas into amazing content! 🎥🖌
👍 How to Join:
1️⃣ Create unique content (video, photo, meme, or text) featuring Gucard or Gumart.
2️⃣ Post it on X or YouTube with the hashtag #Gucard#Gumart
🏆Prizes Await You:
🎖Main Prizes:
1st Place: 1,000 USDT (1 winner)
2nd Place: $500 USDT (3 winners)
3rd Place: $50 USDT (5 winners)
🌟 Community Choice Awards:
50 winners: $10 each (based on community engagement).
💳 Special Bonus: All winners will receive a free Gucard!
🗓Timeline:
🕐 Start: January 5, 2025
⏳ End: January 19, 2025
🔥 Criteria for Winning: Creativity, quality, and interaction - bring your A-game!
#GuMinigame
🥉 GuCard Champions' League – Third Place Revealed!🛍
After NYC and Korea, we now head to the Philippines!
Big congratulations to @mkddavidson, our 3rd Place Winner, who showed how easy it is to grab snacks at the supermarket or order McDonald’s - all using GuCard and GTP. 👍
You’ve won 1,000 USDT, already loaded to your GuCard!
🎥 Watch the winning video: link
GuCard is going global - and this is just the beginning!✋
#GuMinigame#GuPay#GuGoGlobal#GuCard