Наверняка вы замечали, что в 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
В мои лапки попало нечто особенное - @xppengraphictablet Doodle. Это обучающий планшет для детей. И в этот раз мы творили вместе с маленькими художниками и любителями изучать новое.
Мы взяли планшет на дачу, чтобы протестировать его в компании юных талантов. И конечно первое, что могу отметить - это дистанционная работа планшета, не требующая подключения к сети. Планшет имеет встроенную батарею и порт Type-C, чтобы подзарядиться. В целом батарею расходует только верхний обучающий экран и нажатие кнопки очистки. Поэтому смело можно взять планшет на несколько часов и погрузиться с головой.
Планшет #Doodle - это очень бюджетная игрушка с очень приятной ценой. Станет отличным подарком для вашего ребенка на праздник и просто так без повода. Модель представлена в голубом и розовых цветах.
@xppengraphictablet проводит фантастическую акцию с 16 по 25 марта! Добро пожаловать в магазин на AliExpress!
Ищи планшет тут: s.click.aliexpress.com/e/_c3bufq8x
Промокод на скидочку: DLB316
Скидка $10-$2. Действует 3.16-4.30
В субботу в Ростове-на-Дону был концерт группы «Doodle». Дима Гаврилов снова выступал в нашей футболке. А проект "Сбоку От Сцены" в лице Сергея и меня попрыгали на сцене и даже поорали в микрофон песню "Зеркальце". В общем, прошло всё максимально душевно и позитивно.
Кстати, совсем скоро ожидайте от нас некий анонс, который затронет и наших краснодарских друзей. А те, кто был на этом концерте, уже и так его знают.
#КотыИПанкРок#CatsAndPunkRock#Doodle
Este #domingo el #doodle de #Google recuerda a Mary Fairfax Greig Somerville: matemática, astrónoma y científica escocesa autodidacta, conocida como "La Reina de las ciencias del siglo XIX".👩🏫👩🚀🙋♀️
#TremendaNota#mujeres#feminismo
@MasterPoll2Bot
Qué puede hacer este bot?
El nuevo y mejor bot de encuestas en Telegram!
Idioma: Inglés
(visto en @BotsGram_cBots
#poll, #groups, #vote, #doodle, #rating, #forum, #management, #administration
Капитан Америка ...
#artoftheday#digitalillustration#fanart#procreate#illustrationartists#creative#digitaldrawing#arte#inktober#ink#love#watercolor#doodle#anime#portrait
*****
Subscribe!⬅️ Click!