Наверняка вы замечали, что в 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
Perdeberg
The Vineyard Collection
Pinotage
ЮАР 🇿🇦, Паарл, красное, сухое, крепость 14%, Пинотаж.
Ягоды рождены на 25-летних лозах, выдержка в стали и частично в дубе.
Насыщено ароматом, но мне не хватило плотности.
А так, всё отлично, ровно, вкусные тёмные вишни, чернослив, ваниль, дымность, специи. Танины не кусаются, кислотность в норме и хорошо поможет с блюдами из утки).
Ценник +/- 1600р.
Чин!🍷
#пинотаж
#pinotage
#perdeberg
#vineyard
@pro_Wines
Solar panels help winemaker fight climate change
A roof of solar panel shades helps this French winemaker to protect his vineyard from hard frosts and blistering heat.
#France#Vineyard#FrenchWinemaker#SolarPanel#ClimateChange#News#Reuters
Subscribe: http://smarturl.it/reuterssubscribe
Reuters brings you the latest business, finance and breaking news video from around the globe. Our reputation for accuracy and impartiality is unparalleled.
Get the latest news on: http://reuters.com/
Follow Reuters on Facebook: https://www.facebook.com/Reuters
Follow Reuters on Twitter: https://twitter.com/Reuters
Follow Reuters on Instagram: https://www.instagram.com/reuters/?hl=en
➖@reutersworldchannel➖
В ЮАР в феврале собирают виноград.
В выходные на винные фермы приезжают семьями, чтобы погулять, собрать виноград своими руками и увезти домой за 27-28 рэндов ($1,5 или 130-133 руб.) за килограмм.
Фото с винной фермы Луренсфорд недалеко от Кейптауна.
Сайт: https://lourensford.co.za/.
#вино#виноградник#отдых
____________
February is grape harvest time in South Africa.
Families visit wine farms on weekends to enjoy the atmosphere, pick grapes with their own hands, and take them home for 27 or 28 rands ($1,5 or 130-133 rubles) per kilo.
Photos from the Lourensford Wine Farm near Cape Town.
Website: https://lourensford.co.za/.
#wine#vineyard#leisure