Наверняка вы замечали, что в 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
╔══════ ∘◦ ✧ ◦∘ ══════╗
#arknights_Enfield / #Rossi
(ПОСТ ДЛЯ ВП С КАНАЛАМИ)
Вас встречает тгк канал
✩Ꮇиᴧыᴇ ᴀᴩᴛиᴋи𝄞✩! Здесь
вы увидите много милых
артов/ немного эро/ видео/
странички комиксов/
косплеи и многое другое! И кнш темат дни! Присутствует хентай но он за звезды. Посты делаются раз в час или два
✦ ─────────────── ✦
⋆。°✩ Ссылка на канал ✩°。⋆
✦ ─────────────── ✦
⋆。°✩ Ссылка на чатик ✩°。⋆
╚══════ ∘◦ ❀ ◦∘ ══════╝
#Italia#Liguria#Genova
Davide #Rossi (#Lega|ID): "Io sono passato sul ponte Morandi 15 minuti prima del crollo, mi ritengo un miracolato."
@UltimoraPolitics
#Italia#Liguria#Genova
Davide #Rossi (#Lega|ID): "Bisogna mettere al centro il valore della famiglia, integrandola nel settore cittadino."
@UltimoraPolitics
#Italia#Liguria#Genova
Davide #Rossi (#Lega|ID): "Genova è una città più tranquilla rispetto a 5 anni fa. C'è molto da fare, soprattutto nelle zone collinari."
@UltimoraPolitics
#Italia#Liguria#Genova
Davide #Rossi (#Lega|ID): "Vivo in un quartiere periferico, con la comunità sudamericana più grande di Europa. È un lavratorio, abbiamo creato una situazione di diritti e doveri, come il divieto di somministrazione di alcolici in orari notturni."
@UltimoraPolitics
#Italia#Liguria#Genova
Davide #Rossi (#Lega|ID): "Abbiamo avviato molti progetti pubblici, penso al rifacimento della passeggiata, ai lavori per la riqualificazione di Pra. Tanti lavori, da levante al futuro, per costruire una visione nei prossimi 50 anni.'
@UltimoraPolitics
#Italia#Lombardia#Monza
Valeria #Rossi, la cantante di «Tre parole», successo dell’estate del 2001, e oggi dipendente dell’Ufficio anagrafe del capoluogo brianzolo, è candidata nella lista «Monzattiva» a sostegno del candidato sindaco di centrosinistra Paolo #Pilotto.
@UltimoraPolitics