Наверняка вы замечали, что в 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 black robin of New Zealand bounced back from just five birds left in the world in 1980—thanks to devoted conservation, their population is now stable. This comeback highlights how careful human intervention can save even the rarest species from extinction. ✨
#conservation⚡#wildlife⚡#recovery
👉subscribe Interesting Planet
OrangeFox Recovery Project - Official | Nothing Phone (2)
📝 Details:
- Version: R11.1_1
- Codename: #Pong
- Released: 08/02/24
⬇️ Download : Here
🏛 Support Threads : TG | XDA
⚙️Installation | Visual Tutorial
📸Screenshots
💰 Donate : UPI || PayPal
🏷 Tags: #OFOX#Recovery#Official
🗒 Notes:
Cmds to flash via fastboot:
fastboot flash recovery_a <recovery.img>
fastboot flash recovery_b <recovery.img>
Flashing to both slots is optional! Users can update by flashing the new build over the previous one by flashing the zip in magisk or manually extracting the recovery.img and flashing it via fastboot or supported flashing apps.
If you flash the OTA.zip (Nothing OS update packages), it's recommended to follow these steps for a smooth update process:
1. Flash the OTA.zip.
2. Immediately flash the OrangeFox.zip.
3. Reboot to recovery.
4. Flash the OTA.zip again.
5. Follow up with flashing the OrangeFox.zip.
✨Changelogs:
- Synced with latest sources
- fixes various bugs and problems
- Fixed flags
- Fixed flashing error via old orangefox via last build
- Improved compatibility with custom roms
🏆Credits:
- Nebrassy for his TWRP trees
👤 Maintainer : @phobosc_io
🔔 Updates : @NothingPhone2Updates
🐙 Chat : @NothingPhone2
OrangeFox Recovery Project - Official | Nothing Phone (2)
✍️ Details:
- Version: R11.1_6
- Codename: #Pong
- Released: 17/10/2024
🔽 Download : Here | Toolbox
⚙️ Installation: Here
🆘 Support Threads : TG | XDA
📸 Screenshot: Here
🎄 DT: Here
💵 Donate : UPI | PayPal
🔖 Tags: #OFOX#Recovery#Official#NothingPhone2
💫 Changelogs:
- Update to R11.1_6 version
- Updated prebuilt magisk to v28.0
- Now when flashing image you see all options at once
- Built with latest source
🏆Credits:
- Nebrassy for his TWRP trees
👤 Maintainer : @phobosc_io
🔔 Updates : @NothingPhone2Updates
🐙 Chat : @NothingPhone2