2016-02-13 3 views
2

я установить некоторые переменные окружения в ~/.profile:Чтение переменных среды в Python

SOMEVAR=/some/custom/path 

и уже сделал source ~/.profile. Так что, когда я делаю:

echo $SOMEVAR 

печатает правильный каталог:

/some/custom/path 

Однако, когда я пытаюсь прочитать эту переменную в скрипте Python, он не:

import os 

print(os.environ["SOMEVAR"]) 

I получить:

Traceback (most recent call last): 
    File "environment_test.py", line 3, in <module> 
    print os.environ["SOMEVAR"] 
    File "/usr/lib64/python2.7/UserDict.py", line 23, in __getitem__ 
    raise KeyError(key) 
KeyError: 'SOMEVAR' 

W Там что-то не так?

ответ

4

Вы не хотите, чтобы запущенные процессы отображали все созданные вами дерьмо (= переменные). Следовательно, регулярные переменные видны только в этой оболочке, которую вы выполняете.

Вы должны экспортировать переменную:

export SOMEVAR=/some/custom/path 
+0

в '~/.profile'? Но почему тогда работает 'echo $ SOMEVAR'? – daniel451

+0

Переменная присутствует в вашей оболочке (процесс, полученный из .profile), но не экспортируется в дочерние процессы (ваш скрипт python). –

+0

Замечательно, спасибо за объяснение! Я добавил «экспорт», и теперь он работает :) – daniel451