variable - pythonpath



Quando os.environ['foo'] non corrisponde a os.getenv('foo')? (1)

os.environ viene creato all'importazione del modulo os e non riflette le modifiche all'ambiente che si verificano in seguito se non vengono modificate direttamente. È interessante notare che, tuttavia, os.getenv() realtà non ottiene le variabili di ambiente più recenti, almeno non in CPython. Vedete, in CPython, os.getenv() è apparentemente solo un wrapper attorno a os.environ.get() (consultate http://hg.python.org/cpython/file/6671c5039e15/Lib/os.py#l646 ) . Quindi sembra che la ragione principale per usare os.getenv() con l'implementazione dichiarata è quando si vuole avere un valore predefinito restituito quando un nome di variabile d'ambiente non viene trovato nelle chiavi di KeyError piuttosto che avere un KeyError o qualsiasi altra cosa lanciato e vuoi salvare alcuni personaggi.

È del tutto possibile che l'implementazione su FreeBSD abbia qualche strana trovata che lo fa agire in modo diverso, ma non sono sicuro del perché. Dai un'occhiata alla copia di os.py su una delle macchine FreeBSD che usi, se puoi.

Ho una piccola applicazione Python, lanciata tramite subprocess.Popen , che prende 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 .

O meglio, li leggeva in quel modo. Su Windows, ha funzionato bene. Ma sui nostri server FreeBSD, os.getenv restituisce None per tutti i parametri passati. La parte dispari è che os.environ ha i valori proprio bene e, in effetti, semplicemente passa tutte le os.getenv('foo') a os.environ['foo'] fatto funzionare tutto bene su entrambe le piattaforme.

Perché questi valori sono diversi? Quando è appropriato rispetto all'altro?





freebsd