Наверняка вы замечали, что в 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
Giuseppe #Conte afferma: "Il Movimento cinque stelle deve avere una forte identità. Non abbiamo nulla a che fare con la destra, ma preferisco non dire di sinistra". Osserva che il M5s "non può essere più il movimento iniziale di protesta" e che la sua collocazione deriva da istanze sociali, ecologiche e ambientali; aggiunge: "non di sinistra perché la storia della sinistra è quella del Pd e del Partito comunista"
@UltimoraPolitics24
Giuseppe #Conte afferma: "Bisogna andare a Kiev ogni mese per dimostrare qualcosa? Io non sono andato neppure a Gaza". Aggiunge: "Perché non andate a Gaza, in Cisgiordania? Applicare un doppio standard non è da M5s"
@UltimoraPolitics24
Board of Peace, Giuseppe #Conte: "Assolutamente non è dignitoso che l'Italia partecipi a una gestione, a uno strumento che non è certo di pacificazione di quella terra. È uno strumento che in questo momento, con le personalità che sono state inserite, con i criteri con cui viene gestito, che appare una sorta di comitato di affari che prelude a una speculazione immobiliare a danno dei palestinesi, non a loro favore" (Ansa)
@UltimoraPolitics24
Giuseppe #Conte: "Le immagini che arrivano da Torino sono inqualificabili. Il Movimento 5 Stelle condanna con la massima fermezza le violenze e le aggressioni perpetrate ai danni delle Forze dell'ordine e della troupe Rai. Atti che nulla hanno a che vedere con il dissenso democratico e che vanno respinti senza nessuna ambiguità. Agli agenti feriti e a tutti i professionisti coinvolti va la nostra piena solidarietà."
@UltimoraPolitics24
Referendum giustizia, Giuseppe #Conte: "Io rappresento una forza politica che fin dall'inizio si è battuta contro un disegno di legge pericoloso. L'abbiamo fatto convintamente perché riteniamo che si inquadri in un processo più ampio e che ha un obiettivo preciso di una politica di destra e cioè restituire il primato alla politica, scardinare il nostro sistema costituzionale e il principio dell'equilibrio dei poteri in base al quale la politica sia contrastata giustamente da un sistema di pesi e contrappesi. Ma se hai l'investitura popolare non puoi fare quello che ti aggrada ma devi rispettare i principi dello stato di diritto" (ANSA)
@UltimoraPolitics24
Giuseppe #Conte ad Atreju: "Noi siamo disponibili a dialogare con Il Pd e con le altre forze progressiste.
Se verrà fuori un'alleanza dipenderà solo dai programmi, se ci verranno scritte le nostre battaglie di sempre, dall'etica pubblica alla legalità, alla giustizia ambientale e sociale. Prima il programma, il candidato verrà dopo" e poi "Noi non siamo alleati con nessuno" (ANSA)
@UltimoraPolitics24
❗️Giuseppe #Conte: "Giorgia Meloni ha mentito in parlamento sul MES. Ho chiesto al presidente Fontana la convocazione del Giurì d'onore"
@UltimoraPolitics
❗️ Suppletive Monza, Giuseppe #Conte: "Il candidato del M5S sarà Marco Cappato. Abbiamo scelto di unire il più possibile le forze alternative a questa destra."
@UltimoraPolitics
Giuseppe #Conte: "Il governo è allo sbando. Sul decreto Lavoro, in realtà decreto Precariato, il governo non ha nemmeno la maggioranza in commissione Bilancio al Senato sui suoi stessi emendamenti."
@UltimoraPolitics
Giuseppe #Conte: "La patriota Meloni paga a Salvini la tassa per tenerlo in maggioranza, svende l'unità d'Italia per qualche punto percentuale in più alle regionali. Dobbiamo contrastare questo progetto di autonomia soprattutto sulla scuola e sulla sanità"
@UltimoraPolitics
Ucraina, Giuseppe #Conte: "Assistiamo a un sempre maggiore coinvolgimento, anche dell'alleanza Nato, in questo conflitto, mentre scompaiono all'orizzonte i negoziati di pace" @UltimoraPolitics
Ucraina, Giuseppe #Conte: "Assistiamo a un sempre maggiore coinvolgimento, anche dell'alleanza Nato, in questo conflitto, mentre scompaiono all'orizzonte i negoziati di pace"
@UltimoraPolitics