Наверняка вы замечали, что в 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
【#本站公告#General #Spring Festival Activities】
🧧The 2023 mushroom cloud Chinese New Year event has started!🧧
==================================
🐰The Year of the Rabbit uses mushroom cloud to let you "🐰Rabbit Fly Forward 🐰Rabbit to Run" all the way 💰
==================================
🌟This limited-edition special product, annual payment special discount 366CNY, let you go smoothly 💰💰💰
Limited to 10, sold out will not make up~
Preferential Specifications:
Time: 365 days
Level: big mushroom
Traffic: 888G (can be reset every 45 days)
Broadband: Peak 888Mbps
==================================
🌟All station product discount code:
Monthly payment: 15% off 2023-CNY-MON
Quarterly payment: 2023-CNY-SEA 25% off
Annual payment: 2023-CNY-YEA 35% discountG
================================
‼️ Notes for this Spring Festival event
1. All discounts are limited to new purchases (old packages cannot be used)
2. None of the refunds are supported
3. In case of exploiting loopholes or violating TOS (including behaviors suspected of loopholes), we have the right to refuse to provide you with services, or even ban your account. This site reserves the highest right of interpretation.
Event schedule: 2022/01/17 22:00-2023/02/01 00:00
==================================
Latest official website: https://1mgy.com
Contact customer support: https://t.me/mushroom_cloud_bot
--------------------------------------------------------------------
🧧2023 mushroom cloud 春節活動開跑囉!🧧
================================
🐰兔年使用 mushroom cloud 讓您 “🐰兔飛猛進 🐰兔來運轉” 一路發發發💰
================================
🌟本檔限量特惠产品,年缴 特惠366CNY,让您一顺顺利利💰💰💰
限量10,售完不補~
特惠規格:
时间:365day
等级: 大蘑菇
流量: 888G (每45天可人工重置一次)
宽带: 峰值888Mbps
================================
🌟全站產品優惠碼:
月繳: 2023-CNY-MON 8.5折
季繳: 2023-CNY-SEA 7.5折
年繳: 2023-CNY-YEA 6.5折
================================
‼️本檔春节活动注意事项
1. 所有優惠限新購(舊套餐無法使用)
2. 均不支持退款
3. 如有出現鑽漏洞或者違反TOS嘅行為(包含疑似漏洞嘅行為),我哋有權拒絕為您提供服務,甚至封禁賬號,本站保留最高解釋權。
活動檔期: 2022/01/17 22:00-2023/02/01 00:00
================================
最新官網: https://1mgy.com
聯繫客服: https://t.me/mushroom_cloud_bot
POCO M7 Plus, POCO M8s, REDMI 15 - China - OS3.0.302.0.WOUCNXM (Android 16)
📆2026/05/06 #release📱#spring
📥Recovery ROM
📝Changelog:
[System]
Updated the security patch to August 2025. Increased system security.
🔗@xiaomiui | @miui_download | @hyperosfirmware | MemeOS Updates | XimiTime