Наверняка вы замечали, что в 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
🇬🇧 Un homme a blessé deux personnes au couteau dans un quartier à forte population juive du nord de Londres, indique un communiqué de l'organisation caritative Community Security Trust, qui assure la sécurité supplémentaire de la communauté juive.
Selon l'organisation, les faits se sont produits dans le quartier de Golders Green. Un homme armé d'un couteau a couru dans la rue, attaquant des passants. Il a été arrêté par la police, qui a utilisé des pistolets à impulsion électrique.
#royaumeuni#capitale#attaque
https://x.com/SavinoBalzano/status/1869824403438972988?t=SlRhWhvtMS__pKbKfi0MjQ&s=19
Qual è il nome del peggior #Sindaco nella storia di #Roma? Si chiama #RobertoGualtieri.
Per carità, anche da #Ministro non è stato memorabile: in pochi lo ricordano, più che altro per una strimpellata in tv piuttosto deprimente.
Ciò detto, in pochi giorni si è superato: a proposito della sua amministrazione ha parlato di "miracoli di rapidità" e, a poche ore di distanza, pubblica un video nel quale inaugura una nuova grande opera, una ciclabile di meno di un chilometro (lo dice lui stesso) che collega Termini a La Sapienza, un tratto di strada che a piedi avrò percoso centinaia di volte in meno di dieci minuti. Una roba poco più che inutile.
Di contro, lunedì, per una commissione, ho dovuto percorrere in auto 13 km e, tra andare e tornare, sono stato alla guida la bellezza di tre ore.
La #Capitale cade a pezzi, letteralmente, e noi che la viviamo (e l'amiamo) abbiamo la merda fino al collo: ovvio che quando vedi certe pagliacciate ti incazzi e non poco.
Ancora però mi domando: tutti quelli che mettevano in croce Virginia Raggi dove minchia sono finiti? Giornali di #destra e di #sinistra, telegiornali che hanno aperto per mesi i titoli coi disastri capitolini del tempo, non avete proprio nulla da dire su Gualtieri? Niente niente?
La #democrazia, quanto ci piace.
Il #BattitoreLibero a #5Notizie, #RadioCusanoCampus