Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> добавить переменное окружение из python, sys.path.append и os.environ.get("PATH") 
V
    Опции темы
Wuffur
Дата 29.8.2011, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 22.7.2007

Репутация: нет
Всего: нет



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

Может в винде python`у нужны права администратора, чтобы добавлять переменные окружения?

Это сообщение отредактировал(а) Wuffur - 29.8.2011, 21:06
PM MAIL ICQ   Вверх
Backward
Дата 30.8.2011, 01:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 5.6.2007

Репутация: 2
Всего: 2



sys.path - это список папок, в которых происходит поиск модулей и пакетов Python (т.е. когда в своем скрипте Вы напишите import чего_то_там, то поиск этого самого чего_то_там будет последовательно выполняться сначала в текущей папке, а затем в папках входящих в sys.path)
Для доступа к переменным окружения можно воспользоваться os.environ
PM MAIL   Вверх
Dagger
Дата 30.8.2011, 02:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 377
Регистрация: 4.9.2002
Где: Киев

Репутация: 1
Всего: 8



в общем по полочкам:
  •  красиво это сделать скучно т.к. управление переменными окружения зависят от текущего shell
  •  если предположить, что текущий шел bash или sh, то вызывать с помощью subprocess
    Код

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

PM MAIL WWW Skype   Вверх
Wuffur
Дата 30.8.2011, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 22.7.2007

Репутация: нет
Всего: нет



Цитата(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



PM MAIL ICQ   Вверх
Wuffur
  Дата 31.8.2011, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 22.7.2007

Репутация: нет
Всего: нет



Нашел решение в винде:
Код

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)




Это сообщение отредактировал(а) Wuffur - 31.8.2011, 23:44
PM MAIL ICQ   Вверх
Wuffur
Дата 1.9.2011, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 22.7.2007

Репутация: нет
Всего: нет



Работает!
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0680 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.