добавить переменное окружение из python

 
0
 
Python
ava
Wuffur | 29.08.2011, 21:46
Собственно, как добавить переменную окружения, и что добавляет, а то sys.path.append добавляет не в переменную окружения path, а не знаю куда.
Может есть какая-то команда exec(), только я не знаю, чтобы добавить вручную. Или еще проще. А то иногда еще приходится добавлять ссылки на слинкованные библиотеки(.so), то есть выходить из питона и заново входить.
Точно os.putenv(), правда ничего не случается.
Для выполнения команд нашел модуль subprocess функция call.
А добавление sys.path.append - это добавления переменных окружения python`a, вроде.

Может в винде python`у нужны права администратора, чтобы добавлять переменные окружения?
Kommentare (5)
ava
Backward | 30.08.2011, 01:23 #
sys.path - это список папок, в которых происходит поиск модулей и пакетов Python (т.е. когда в своем скрипте Вы напишите import чего_то_там, то поиск этого самого чего_то_там будет последовательно выполняться сначала в текущей папке, а затем в папках входящих в sys.path)
Для доступа к переменным окружения можно воспользоваться os.environ
ava
Dagger | 30.08.2011, 02:03 #
в общем по полочкам:
  • красиво это сделать скучно т.к. управление переменными окружения зависят от текущего shell
  • если предположить, что текущий шел bash или sh, то вызывать с помощью subprocess

    call('export %s="%s"' % (env_var_name, env_var_value))
ava
Wuffur | 30.08.2011, 11:26 #
Цитата (Dagger @ 30.8.2011, 02:03)
в общем по полочкам:



  • красиво это сделать скучно т.к. управление переменными окружения зависят от текущего shell


  • если предположить, что текущий шел bash или sh, то вызывать с помощью subprocess



    call('export %s="%s"' % (env_var_name, env_var_value))





У этой строчки кода

call('export %s="%s"' % (env_var_name, env_var_value))

Как и у

subprocess.Popen('export %s="%s"' % (env_var_name, env_var_value), shell=False)

такая ошибка:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python2.6/subprocess.py", line 595, in __init__
errread, errwrite)
File "/usr/lib64/python2.6/subprocess.py", line 1092, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory

ее нет, если написать shell=True:

subprocess.Popen('export %s="%s"' % (env_var_name, env_var_value), shell=True)

но в переменных окружениях ничего не изменяется.
и еще, нужно ли убивать процесс, а то Popen.kill не передает аргументов:

pid = subprocess.Popen('export %s="%s"' % (env_var_name, env_var_value), shell=Truе).pid


ava
Wuffur | 31.08.2011, 22:38 #
Нашел решение в винде:

os.environ[env_var_name] = env_var_value;

Если будет работать в linux`e, то тему закрою.

спасибо
smile python.su smile и smile всем smile кто smile ответил smile в smile теме smile
!!!
smile

os.environ - это большой словарь, но тип у него не dict, а если взять type(os.environ) получится instance. Посмотрел внутрь, называется userdict, видимо он наследуется от словаря и к нему добавлены еще какие-то функции.
Там написано, что UserDict — Class wrapper for dictionary objects(класс обертка для объектов словарей). (последний багфикс в нем был 5 часов назад smile http://hg.python.org/cpython/file/2.7/Lib/UserDict.py)
можно еще

os.environ.__setitem__(env_var_name,env_var_value)


ava
Wuffur | 01.09.2011, 09:18 #
Работает!
Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
advanced
Absenden