Загрузка модулей среды в скрипте Python - PullRequest
18 голосов
/ 25 марта 2011

Есть ли способ для скрипта Python для загрузки и использования модулей среды ? os.system('module load xxx') не работает, так как выполняет их в подоболочке (по крайней мере, я так думаю).

Ответы [ 3 ]

17 голосов
/ 20 августа 2013

Я знаю, что этот вопрос довольно старый, но он все еще достаточно актуален, чтобы я искал ответ, поэтому я публикую то, что я нашел, что также работает:

По крайней мере, в 3.2.9+Источники, вы можете включить файл init "python", чтобы получить версию модуля с функцией python:

>>> exec(open('/usr/local/Modules/default/init/python.py').read())
>>> module('list')
No Modulefiles Currently Loaded.
>>> module('load','foo')
>>> module('list')
Currently Loaded Modulefiles:
  1) foo/1.0

Мне говорили, что более ранние версии могут делать то же самое без расширения .py, но это из вторых рук, ymmv.

Альтернативное расположение файла «init» (из комментария @lib): /usr/share/Modules/init/python.py

Для использования с Python 3 требуется версия 4.0 модулей среды или выше, так какэто первая версия с безошибочной Python3-совместимой версией файла инициализации Python.

4 голосов
/ 25 марта 2011

Один из наших администраторов смог решить эту проблему, используя os.popen() звонки на modulecmd:

cmd = os.popen('/path/to/modulecmd python load my-module')
exec(cmd)
0 голосов
/ 25 марта 2011

Не напрямую, но вот один из возможных обходных путей, в зависимости от вашей среды.Предполагая, что вы можете ввести в системную команду ENVVAR=value, вы можете сделать что-то вроде этого:

import os
os.environ['EDITOR'] = 'vi'
cmd = "EDITOR=%(EDITOR)s $EDITOR" % os.environ
os.system(cmd)

Код присваивает vi переменной среды EDITOR, а затем передает еекомандной строки и запускает команду, которая (в данном случае) - РЕДАКТОР.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...