Наверняка вы замечали, что в 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
☃️970_из того, что есть☃️
Доброго времени суток, Россия🎄
На фото рабочий стол нашего специалиста по ремонту дронов. Можете ознакомиться с качеством запчастей.
Но даже из такого, казалось бы, мёртвого хлама, можно достать нужные детали для ремонта.
Работаем!
🎄До нового года остались считанные часы...🎄
❄️С наступающим ❄️
🇷🇺Мы в МАХ
Инженерный💪фронт
Призрак Новороссии
2025.
🎄rutube🌍vkвидео🌍дзен
#дрон#dji#mavic
#БПЛА#Mavic#Сброс Боевая работа расчётов БПЛА группировки "Запад" по укреплениям и укрытиям личного состава ВСУ на Богуславском направлении. Выучка и высокий уровень боевого мастерства расчётов в немалой степени обеспечивают продвижение линии фронта вперёд, позволяя пехоте отбивать у врага всё новые и новые позиции.
#БПЛА#Mavic#Сброс Пока страна на новогодних каникулах, боевая работа на Богуславском направлении идёт в штатном режиме. Свежая подборка новогодних сбросов от операторов БПЛА группировки "Запад"
#БПЛА#Mavic#Сброс Недавно, на Богуславском направлении, противник попытался отбить занятые бойцами группировки "Запад" позиции. В результате умелых и слаженных действий наших воинов, контратака противника была отбита, враг понёс потери и отступил. Это прекрасный подарок Родине от наших бойцов к празднованию Нового Года! Наше дело правое. Враг будет разбит. Победа будет за нами. С наступающим Новым Годом!
#БПЛА#Mavic#Сброс Боевая работа операторов БПЛА группировки "Запад" это не только успешные сбросы и уничтожение живой силы и техники врага. Бойцы сбрасывают над территориями которые контролируются противником листовки агитирующие врага оставить свои позиции и сдаваться в плен. Информационное противоборство - неотъемлемая часть современной войны.
#БПЛА#Mavic#Сброс На Богуславском направлении бойцы группировки "Запад" день за днём оттачивают свои боевые навыки. Оператор БПЛА Волчок демонстрирует своё искусство, великолепным сбросом уничтожая ещё одного бойца противника.
#БПЛА#Mavic#Сброс На видео военнослужащий группировки "Запад", воюющий на Богуславском направлении, позывной Элджей, рассказывает о своей боевой работе. Специалист в изготовлении зарядов для сбросов с БПЛА, готовит подарки для противника недалеко от ЛБС. Успехом пользуются именно фугасные заряды, которые помогают уничтожать опорные пункты противника для более упрощённого продвижения штурмовых групп.
#БПЛА#Mavic#Сброс Ночная боевая работа операторов БПЛА группировки "Запад" на Двуреченском направлении по живой силе противника за летний-осенний период. Архивные кадры.