2012-03-14 3 views
1

, если я запускаю команду ENV я получаю этот выход:питон не получает переменное окружение, но она установлена ​​на Mac OS

TERM_PROGRAM=Apple_Terminal 
GPG_AGENT_INFO=/Users/paganotti/.gnupg/S.gpg-agent:346:1 
TERM=xterm-color 
SHELL=/bin/bash 
TMPDIR=/var/folders/BM/BMT-0W4+H5yVS5fJngFdsk+++TI/-Tmp-/ 
Apple_PubSub_Socket_Render=/tmp/launch-V50MvM/Render 
TERM_PROGRAM_VERSION=273.1 
USER=paganotti 
COMMAND_MODE=unix2003 
SSH_AUTH_SOCK=/tmp/launch-llkTBf/Listeners 
__CF_USER_TEXT_ENCODING=0x1F5:0:0 
PATH=/Library/Frameworks/Python.framework/Versions/2.7/bin:/opt/local/bin:/opt/local/sbin:/Library/Frameworks/Python.framework/Versions/3.2/bin:/Users/paganotti/Documents/Project/ZendFramework-1.11.11-minimal/bin/zf.sh:/opt/local/bin:/opt/local/sbin:/opt/local/bin:/opt/local/sbin://usr/local/git/bin/git:/Library/Frameworks/Python.framework/Versions/3.1/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin:/usr/local/ImageMagick/bin:/usr/local/MacGPG2/bin:/usr/texbin:/usr/X11/bin:/Users/paganotti/Sviluppo/android-sdk-1.5_r3/tools 
PWD=/Users/paganotti 
LANG=it_IT.UTF-8 
SHLVL=1 
HOME=/Users/paganotti 
LOGNAME=paganotti 
GIT_PYTHON_GIT_EXECUTABLE=/usr/local/git/bin/git 
DISPLAY=/tmp/launch-aqcM4a/org.x:0 
_=/usr/bin/env 

Я пытаюсь получить переменную GIT_PYTHON_GIT_EXECUTABLE с питоном:

GIT_PYTHON_GIT_EXECUTABLE = os.getenv('GIT_PYTHON_GIT_EXECUTABLE') 
    print GIT_PYTHON_GIT_EXECUTABLE 

но вывод на печать:

None 

, потому что, кажется, не рассматривают переменную GIT_PYTHON_GIT_EXECUTABLE? Что случилось?

UPDATE

Я установил переменные окружения в PyCharm и теперь он прочитал, что, но в моем реальном приложении я использую QThread класс PyQT библиотеки. Мое приложение, созданное поверх библиотеки pyqt при запуске, выполняет Qthread. В Qthread для выполнения функций gitpython. Функции GitPython запускают подпроцесс и пытаются прочитать GIT_PYTHON_GIT_EXECUTABLE, но он не может читать переменную.

+0

как вы вызываете python? – vartec

+0

от Pycharm IDE, который имеет встроенный интерпретатор python: /Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7 – paganotti

+0

Вы запускаете Pycharm из оболочки, где вы задаете переменную окружения? – Dunes

ответ

2

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

Причина в том, что когда вы устанавливаете переменную окружения, она не является глобальной для всей машины, только для текущей оболочки и ее подпроцессов. И каждый подпроцесс получает только моментальный снимок среды родителя при его запуске. Будущие изменения среды в родительском объекте не отражаются в дочернем процессе (и наоборот).

Вы можете сделать переменную глобальную для всей системы, отредактировав файл .profile (или желательно .bash_profile, если вы используете bash) в своем домашнем каталоге. Если они не существуют, просто создайте их. В файле просто добавьте команду экспорта, которую вы хотите. Этот файл запускается при первом входе в систему на вашем компьютере (так что вам нужно переустановить его для работы). Все будущие программы после входа в систему будут иметь доступ к переменным среды, указанным в файле профиля. Это работает, потому что, когда вы входите в систему, появляется новая оболочка, из которой будут запускаться все остальные запущенные вами процессы.

+0

Я установил переменную окружения в pycharm и теперь прочитал это, но в моем реальном приложении я использую qthread. У меня есть тест и в qthread я не могу прочитать переменную. Эта переменная используется библиотекой GitPython для поиска git-исполняемого файла. Я могу сделать с Qthread? – paganotti

+0

Вы имеете в виду, что вы начинаете отдельный поток в C++ и запускаете python в качестве подпроцесса оттуда? – Dunes

+0

Нет, извините. У меня есть приложение в pyqt. Мое приложение при запуске запускает Qthread. В этом Qthread я пытаюсь прочитать переменную envirement – paganotti

Смежные вопросы