2012-09-11 30 views
7

Ho un software complesso che non riesco a pubblicare, né ho un esempio concreto di lavoro. Proverò a spiegare il problema, forse qualcuno l'ha già incontrato prima.restituisce os.getenv Nessuno valore invece corretto

Sulla shell di Linux ho definito una variabile di ambiente:

> export MY_TEST_ENV=4711 
> echo $MY_TEST_ENV 
> 4711 

All'interno del codice complesso che voglio ottenere questa variabile con

print os.getenv('MY_TEST_ENV') 

che restituisce sempre None. Se creo uno script di test per verificare questo comportamento, anche con le classi in file diversi, ottengo sempre il comportamento desiderato (ad esempio, os.getenv('MY_TEST_ENV') restituisce il valore corretto 4711).

Il codice viene avviato come 'sudo'.

Qualche idea quale potrebbe essere la ragione?

+1

Come si esegue questo "codice complesso"? – geoffspear

+4

Le restanti variabili d'ambiente sono ancora lì? Come viene avviato il processo Python? Se si avvia un processo con la chiamata di sistema 'execve' e si fa _non_ compilare la variabile di ambiente, l'ambiente del bambino viene azzerato. – alexis

+0

Sapevo che la soluzione al mio problema è banale, perché eseguo il processo Python come sudo! Ma non ho visto questa soluzione finché non mi è stato chiesto o come eseguire il codice. Senza sudo, vedo la variabile (ma il resto del codice non funzionerà, però). – Alex

risposta

4

Molto probabilmente il modo in cui invochi il processo Python ti fa perdere l'ambiente. Se esporti la variabile all'interno di una shell in esecuzione e, subito dopo, invochi il processo Python in questione nella stessa shell, questa variabile di ambiente dovrebbe essere sicuramente disponibile per questo processo Python. Per facilitare il debug di questo problema: invece del codice in questione (print os.getenv('my...')), stampare l'intero ambiente tramite print os.environ. Dal risultato dovresti essere in grado di dedurre cosa è successo al tuo ambiente.

Problemi correlati