Наверняка вы замечали, что в 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
#AESinfo | #Niger🇳🇪🤝🏾🇬🇧#GB
Diplomatie : Le Royaume-Uni Cherche à Renforcer sa Coopération Directe avec le Niger
Le Ministre des Affaires Étrangères, de la Coopération et des Nigériens à l’Extérieur, S.E. Monsieur BAKARY Yaou Sangaré, a reçu en audience ce jour S.E. Madame Catherine Inglehearn, Ambassadrice du Royaume-Uni au Niger. Cette rencontre, à l'initiative de l'ambassadrice britannique, a porté sur les nouvelles orientations potentielles de la coopération bilatérale entre les deux nations.
Au cœur des discussions, la volonté d'intensifier et de rendre plus visible la coopération bilatérale a été soulignée. Le Ministre BAKARY a exprimé le souhait que cette coopération se développe de manière directe, privilégiant une approche bilatérale plutôt que de passer par des ONG ou des organismes internationaux.
Retrouvez l’article complet sur
Twitter X @AESinfos
Facebook https://www.facebook.com/share/1bQfDUsTmn/?mibextid=wwXIfr