Наверняка вы замечали, что в 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
Наконец-то смог поиграть в новый Аркнайтс.
Прошёл первые главы и покрутил гачу. За вход в игру дали Арделию, а в стандартном баннере выпала её копия, а также Лифэн. Пограничник выпал в баннере новичка. Бесплатного легендарного персонажа ещё не выбирал, но в ящике с оружием взял меч для Пограничника.
Впечатления примерно как на бета-тесте, начало игры просто освежило память. Очень хотелось депнуть на Лэватейн, но я сдержался и решил вообще не донатить в игру в первом патче.
Добавляйтесь в друзья: 6327281061
#endfield@ostalf_lab
Мне попался смешной ролик с озвучкой сюжета ХСР через нейросеть. Там иронично озвучивались происходящие события... и у меня появилась глупая идея: записать стартовый геймплей Эндфилда, написать текст, озвучить его и смонтировать всё в ролик.
Почему-то вся эта история хорошо лайкается и воспринимается как ирония, поэтому я по приколу залил видео в ТикТок.
Бездарная трата времени.
#endfield@ostalf_lab
Оказывается Т2x2 нашёл лайфхак по выпадению легендарок в Arknights: Endfield :D
Я обычно не смотрю стримеров, но мне стало интересно как он будет обозревать игру на проплаченном стриме.
Итог: такая себе реклама.
#endfield@ostalf_lab
В следующем месяце стартует бета-тестирование Arknights: Endfield.
Это интересный проект, за которым я слежу с первого бета-теста. Зарезервировал URL, но планировал запустить канал ближе к релизу или после подтверждения русской локализации. Птичка нашептала, что русский перевод всё таки будет, так что канал запустил сегодня. Уже появились первые официальные русскоязычные ресурсы, а 31 октября пройдёт специальная трансляция. Запись трансляции будет доступна с русскими субтитрами.
Постараюсь получить доступ к бета-тестированию или поработать с другим тестером.
Слышали об этой игре?
#endfield@ostalf_lab
Продуктивно провёл первую половину стрима — работал на заводе строил своё производство.
Сегодня умудрился выбить созвездие Эмбер и легендарный меч, а также получил сигнатурное оружие Эмбер за закрытие баннера новичка.
#стрим@ostalf_lab / #endfield@ostalf_lab
🥳Канал по новому Аркнайтсу достиг отметки в десять тысяч подписчиков.
Принял участие в веб-ивенте, но доступ получить не смог. Кто-нибудь из вас стал счастливчиком?
#проекты / #endfield