Наверняка вы замечали, что в 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
Пожалуй, первым покажу содержимое самой большой коробочки ☺️ братец кролик котик ☺️ теперь точно никого из этой линейки покупать не буду😀 можно сказать, сердце успокоилось ☺️ вот этот бежевый мне нравится даже больше ☺️ такая булочка аппетитная (судя по тому, как шорты на попку налезали, булочки он точно любит😂)
#Алёнкина_коллекция#hani
Hani from Yunnan China — Hani Polyphonic Singing in Yunnan China (Sublime Frequencies, 2024)
#traditional#field_recording#hani#choral#babi#mepa#chiwo#labi#lahe#meba#China
Альбом Hani Polyphonic Singing in Yunnan China демонстрирует уникальные традиции полифонического пения народа хани — этнической группы, численностью около 1,5 миллионов человек, проживающей на юге китайской провинции Юньнань. Меньшие сообщества хани также встречаются в соседних Лаосе и Вьетнаме. В языковом отношении хани связаны с ветвью йи тибето-бирманской языковой семьи.
Музыкальные традиции хани отличает хоровой стиль, где голоса накладываются друг на друга с небольшим временным сдвигом, создавая эффект перекатывающегося, как бы каскадного звучания. При этом каждый участник добавляет свою вариацию мелодии. Такое сочетание черт создает, с одной стороны, необычное даже для Юго-Восточной Азии пение, напоминающее тибетскую духовную музыку, а с другой — сближает его с европейскими мессами и мотетами позднего Средневековья и эпохи Возрождения.
Ансамбль также использует традиционные инструменты народа хани, такие как баби (лист дерева, используемый как духовой инструмент), мепа (лист дерева, свернутый в форме рога), чиво (трехструнный смычковый инструмент), лаби (бамбуковая флейта с шестью отверстиями), лахе (небольшая трехструнная лютня) и меба (вертикальный язычковый инструмент).
🔗Bandcamp