Наверняка вы замечали, что в 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
#diqqat#hemis#talaba#YAN
❗️Barcha professor-o’qituvchilar va talabalar diqqatiga!
✅ HEMIS AT tizimining oʻqituvchi profilidagi “Yakuniy nazorat” va “Boshqa nazoratlar” menyularidagi “Reyting qaydnomalari”da oʻzgarishlar boʻlishi kutilmoqda.
⚠️ Tizimning endigi chiqariladigan yangi versiyasida (1.4.5) Reyting qaydnomasiga fan boʻyicha talabalarning oʻzlashtirish baholarini bir marta kiritib saqlash masalasi joriy qilinmoqda. Yaʼni bitta qaydnoma bir marta toʻliq toʻldirilib, bir marta saqlanishi mumkin.
🙏 Shuning uchun professor-oʻqituvchilar talabalarning YAN topshiriqlarini toʻliq baholab, barcha talabalar toʻgʻri baholanganiga ishonch hosil qilib keyin tizimning reyting qaydnomasiga kiritishini soʻraymiz.
✅ Talabalardan esa YANgacha bo’lgan barcha nazoratlardan belgilangan baholarni o’zlashtirish hamda YANga o’z vaqtida va tegishli talablarni bajargan holda kirishlari so’raladi.
☄️ Tizimga baholarni kiritish reglament boʻyicha 5 kun ichida faqat bir marta amalga oshirilishi mumkin. Baholar kiritilib saqlangandan soʻng reyting qaydnomasi toʻliq yopiladi. Yopilgan reyting qaydnomasiga qoʻshimcha kiritish va oʻzgartirishlarga ruxsat berilmaydi.
➡️ Barcha professor-oʻqituvchilar va talabalarga yetkazing.
👨💻Ps: qoʻshimcha savol, muammo va takliflar boʻyicha @registratorofis_botga murojaat qilishingiz mumkin.
✈️TerDU Registrator ofisi