Наверняка вы замечали, что в 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
🔌 ¡Martes de chollos para casa y para el gym!
Hoy destacamos la súper freidora de aire Russell Hobbs de 8,3L casi a mitad de precio (62,9€) y el enchufe inteligente de TP-Link para domotizar tu hogar por solo 8,9€. Y si le das al deporte, atento al cortavientos y a la creatina Optimum Nutrition. ¡Preciazos! 🍟💪
👇 Selección del día:
🔥 DANISH ENDURANCE Cortavientos Hombre por 28,9€ (-42% dto)
🔗https://amzn.to/4rbWQJh
🔥 TP-Link TAPO P100 Enchufe Inteligente por 8,9€ (-41% dto)
🔗https://amzn.to/403MOyG
🔥 Russell Hobbs Freidora de Aire, 8,3 L por 62,9€ (-43% dto)
🔗https://amzn.to/4u72e2M
🔥 Belkin Cargador de Pared con 3 Puertos por 21,9€ (-51% dto)
🔗https://amzn.to/3MVPX0w
🔥 Optimum Nutrition Creatina Micronizada en Polvo por 24,9€ (-29% dto)
🔗https://amzn.to/407CGVI
🔥 Lacer GINGI Encías Delicadas, 2 Uds por 7,5€ (-40% dto)
🔗https://amzn.to/4sorU9v
#Domotica#Airfryer#Deporte#OfertasAmazon#Ahorro
🏷️ ¡Miércoles de no perder nada y cocinar sano!
Hoy tenemos un chollo de los que duran minutos: un pack de 2 localizadores (Smart Tracker) con un 84% de descuento, ¡se quedan en 7,9€! Además, para ir pensando en el buen tiempo, chancletas Puma a mitad de precio (10,7€) y una freidora de aire Russell Hobbs con un 43% de rebaja. Y no nos olvidamos del mega pack de Finish para ahorrar en el lavavajillas. ¡Aprovecha! 🍽️🩴
👇 Selección del día:
🔥 Smart Tracker Tag 2 Uds por 7,9€ (-84% dto)
amzn.to/4seoXbF
🔥 Chancletas Puma por 10,7€ (-53% dto)
amzn.to/3OBEELl
🔥 Russell Hobbs Freidora de Aire por 62,9€ (-43% dto)
amzn.to/4tSyR4c
🔥 Finish Powerball Power, 104 Pastillas por 12,4€ (-23% dto)
amzn.to/4qVrTJ2
🔥 Beurer Cepillo Limpiador Facial Eléctrico por 13,9€ (-44% dto)
amzn.to/4cf17rn
🔥 SUPRUS Encendedor Eléctrico de Arco por 6,9€ (-30% dto)
amzn.to/46qcNE0
#Puma#AirFryer#SmartTracker#Hogar#OfertasAmazon#Ahorro
💥Freidora De Aire Compacta Taurus XL Aero Crisp
Cocina de forma saludable y sin aceite esta Navidad
✅OFERTA: 59.99€
❌ Antes: 144.99€
💰Ahorras un 59%🔥
Capacidad amplia, menús variados y ajustes personalizables
👉 Descubre una nueva forma de cocinar
#freidoradeaire#cocinasaludable#taurus#navidad#ofertas#airfryer#hogar#descuentos
🛰️Oferta publicada en Hogar