Наверняка вы замечали, что в 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
📰 A sharp and unexpected #failure of the Cloudflare hosting provider affected not only many popular sites and services, but also Fragment, the Tonnel gift marketplace and others. 🌩 Developers are studying this problem.
UPD: hosting has been restored.
#failure📰Domain Link Previews t.me stopped being generated. However, previews of old links can be provided, and the links themselves are fully functional.
UPD: problem solved.
#failure📰 Domains t.me, telegram.org,fragment.com and stel.com were not working and were partially down and were restored to service a few minutes ago. VPN did not solve the problem partially either.
⚡️Airbus A320 Уральских Авиалиний, следовавший из Дубая в Екатеринбург, произвел экстренную посадку в Ашхабаде (Туркменистан).
❗️Самолет, после 2-х часов полета перед пересечением границы Ирана с Туркменистаном на высоте 10.000м, подал сигнал бедствия и запросил экстренную посадку в ближайшем аэропорту.
💬 Как сообщают Уральские Авиалинии, у двигателей была разница в показаниях топлива. В связи с этим командир принял решение выключить 1 двигатель.
Лёгкое небо
#emergency#uralairlines#failure#engine#landing
Avoid Copycat Mistakes
Copying strategies without understanding their context can harm startups. From the experience of a former CTO, mindless imitation of established B2B products leads to failure. Large companies aim to protect their gains, while startups focus on growth. Analyze original strategies instead of copying them blindly. Discover more about proper implementation in the provided link.
#Startup#B2B#SaaS#Strategy#Growth#Analysis#Innovation#Business#Entrepreneurship#CTO#Imitation#Failure#Success#Marketing#Learning#Education#BusinessStrategy
Crypto Scandal: LIBRA's Dramatic Fall
Dave Portnoy attempts to buy tokens after repurposing LIBRA, mistakenly investing $200K in a fraudulent version, which plummeted 93%. Meanwhile, President Javier Milei faces allegations of fraud linked to the LIBRA token. A lawsuit by Argentine lawyers cites the former Central Bank head. CEO Hayden Davis of Kelsier Ventures blames insider selling for the crash. Investigations are ongoing amidst claims of insider knowledge in the token launch. For more insights, check the full news: Forklog News.
#Crypto#Argentina#Libra#Miley#Scandal#Failure#InsiderTrading#Lawsuit#Kelsier#Token#Blockchain#Finance#Investigation#HaydenDavis#Fraud#News#Market#Trends#Regulations#DeFi