Назад | Перейти на главную страницу

Переменная среды недоступна в Python

У меня довольно интересная проблема с переменными окружения, и поиск в Google не дал мне значимых результатов:

$ echo $BUCKET && python -c "import os; print os.environ['BUCKET']"
mule-uploader-demo
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python2.7/UserDict.py", line 23, in __getitem__
    raise KeyError(key)
KeyError: 'BUCKET'

Итак, у меня есть переменная среды, которая доступна в bash, но не внутри python. Как это может случиться и как это исправить? Вот некоторые дополнительные сведения:

Это связано с областью видимости переменной в bash. export делает вашу переменную доступной для подпроцессов, см., например:

→ export BUCKET=foo 
→ env | grep BUCKET
80:BUCKET=foo
→ PAIL=bar  
→ env | grep PAIL  # no output
→ python -c "import os; print os.environ['BUCKET']"
foo
→ python -c "import os; print os.environ['PAIL']"  
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "...", line 23, in __getitem__
    raise KeyError(key)
KeyError: 'PAIL'
→ CAN=baz python -c "import os; print os.environ['CAN']"
baz

так что в дочернем процессе PAIL это провал.