Ho una piccola applicazione Python, lanciata tramite subprocess.Popen
, che accetta alcuni parametri sotto forma di variabili d'ambiente. Lo faccio passando la struttura dell'ambiente nella chiamata Popen
. Il programma legge quindi le variabili tramite os.getenv
.Quando os.environ ['foo'] non corrisponde a os.getenv ('foo')?
O meglio, li leggeva in questo modo. Su Windows, ha funzionato bene. Ma sui nostri server FreeBSD, os.getenv
resi None
per tutti i parametri che abbiamo passato. La parte strana è che os.environ
ha i valori proprio bene — e, anzi, semplicemente passare tutti os.getenv('foo')
chiamate a os.environ['foo']
lavoro tutto fatto bene su entrambe piattaforme .
Perché questi valori sono diversi? Quando è appropriato rispetto all'altro?
Su Windows 10, 'os.putenv ('abc', '123')' non ha funzionato, cioè la nuova variabile non è impostata. Tuttavia, 'os.environ ['abc'] = '123'' funziona e successivamente' os.getenv (' abc ') 'funziona pure. –
@arvindpdmn Dopo un altro esame, è perché 'putenv()' in realtà non memorizza la variabile d'ambiente in 'os.environ'; piuttosto, 'environ .__ setitem __()' chiama 'putenv()' e memorizza anche i dati localmente, e né 'getenv()' né 'environ .__ getitem __()' in realtà interrogano l'ambiente stesso, operano su qualsiasi cosa 'os .environ' ha memorizzato. Un modo abbastanza confuso per implementarlo. – JAB