Наверняка вы замечали, что в 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
Xiaomi Pad 7S Pro 12.5 - China - OS3.0.303.0.WOTCNXM (Android 16)
🚨 New internal test version detected! #internal
📆2026/04/29 📱#violin
🔗@xiaomiui | @miui_download | @hyperosfirmware | HyperOS Updates | XimiTime
Xiaomi Pad 7S Pro 12.5 - China - OS3.0.302.0.WOTCNXM (Android 16)
📆2026/03/31 #release📱#violin
📥Recovery ROM
📝Changelog:
[System]
Updated the security patch to August 2025. Increased system security.
🔗@xiaomiui | @miui_download | @hyperosfirmware | HyperOS Updates | XiaomiTime
今天分享一首Violin Sonata No.5, "Spring"~听的时候觉得和Pastoral Symphony跟姐妹似的,都非常lyrical,而且都是F major~说是Violin Sonata,其实原题是Sonatas for Piano and Violin,钢琴的角色也很重要~
#Beethember#Beethoven#violin
https://www.youtube.com/watch?v=tERwEDWh-ko
上周群里说起了Sibelius的Violin Concerto,鄙人找了找Sibelius其他的violin piece,发现了这部5 pieces for violin and piano还蛮喜欢的~
#sibelius#violin#piano
https://www.youtube.com/watch?v=qD-zdXErpRo
今天是勃拉姆斯和柴可夫斯基的生日~今天分享的是大家耳熟能详的勃拉姆斯的Violin Sonata No.1 in G Major第一乐章。这首Violin Sonata 又叫做 Regensonate,是因为取材于他自己的一首艺术歌曲Regenlied,虽然旋律上的运用在第三乐章中更多,在第一乐章中我们多次听到的有三个音符组成的长短长的motif也是来自于Regenlied,成为贯穿全曲的线索。
https://www.youtube.com/watch?v=TbgknpFu8Mw
#yearOfWonder#brahms#violin
ref: Kelly Dean Hansen对于这首作品的细节分析
http://www.kellydeanhansen.com/opus78.html
The Handover — The Handover (Sublime Frequencies, 2024)
#oud#violin#synth#Egypt
The Handover — проект Али Иссы, Аймана Асфура и Йонаса Камбиена, исследующий связь между египетской музыкальной традицией и современными импровизационными подходами. Одноименный их коллективу альбом музыканты записанный в Александрии в январе 2023 года.
🔗Bandcamp
Perelaar — De Ridder In Het Riet (Stoof, 1981)
#traditional#flute#mandolin#accordion#violin#Netherlands
Продолжаем рубрику «забытые европейские исполнители». Perelaar — голландская группа, исполнявшая традиционную музыку. Группа черпала вдохновение из рукописей фризского драматурга Андриса Кирса 19 века, а также из старых источников, таких как Amsterdams Liedboek (1655 г.) и фермерского фольклора 18 века. Этот акцент на аутентичном голландском репертуаре в основном связан с Маритой Круийсвейк, которая играла в Perelaar с 1976 года. Сейчас группа продолжает существовать под названием Pekel.
Telgram