Наверняка вы замечали, что в 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
#RepubblicaCeca#Presidenziali
La terza classificata al primo turno delle presidenziali ceche, Danuše #Nerudová, ha annunciato il suo supporto al candidato Petr #Pavel per il ballottaggio che si svolgerà il 26 e 27 Gennaio: “Abbiamo bisogno di un presidente che sostenga lo sviluppo della cultura politica. È importante che i temi rilevanti per i giovani, come l’inaccessibilità economica degli alloggi, il matrimonio per tutti, l’apertura delle forbici tra religioni, rimangano nello spazio pubblico.”
@OsservatorioEsteri
#RepubblicaCeca
Premier Petr #Fiala (#SPOLU/#ODS|ECR): "La Repubblica Ceca ha riserve di petrolio per tre mesi, di gas per due mesi estivi e riserve nucleari per un periodo fino a tre anni. Per l’esattezza, le riserve di petrolio ceche sono pari a 94 giorni. Per quanto riguarda le riserve di gas, faremo quanto necessario per riempirle prima del prossimo inverno."
@UltimoraPolitics
#RepubblicaCeca#Polonia
Il Primo Ministro ceco Petr #Fiala (#SPOLU/#ODS|ECR) ha incontrato il Presidente polacco Andrzej #Duda. Focus dell'incontro la sicurezza energetica dei due paesi. I due hanno riaffermato la loro determinazione a continuare a sostenere l'Ucraina.
@UltimoraPolitics
#RepubblicaCeca#Taiwan
Per la prima volta dopo il de-riconoscimento di Taiwan da parte della maggioranza degli Stati della comunità internazionale, un Capo di Stato di un Paese #NATO partecipa ad un evento pubblico con un Ministro degli Esteri taiwanese.
Si tratta del Presidente ceco Petr #Pavel e del Ministro taiwanese Joseph #Wu (#DPP|Centro-sinistra): Reuters la definisce una “svolta diplomatica”.
@OsservatorioEsteri
#Germania#RepubblicaCeca#Russia
Come rivelato dal portale ceco “Denikn”, cinque fonti del gabinetto ceco hanno informato di una registrazione audio resa nota dal generale di controspionaggio ceco Michal #Koudelka la scorsa settimana alla riunione classificata del governo ceco.
Tale registrazione riproduce un audio del membro tedesco del Bundestag Petr #Bystroň (#AfD|ID) che riceve denaro dalle spie russe. Bystroň è il portavoce della politica estera di AfD al #Bundestag.
@OsservatorioEsteri