有没有办法让python脚本加载和使用environment modules? os.system('module load xxx')
不起作用,因为它在子shell中执行它们(至少,我认为这是正在发生的事情)。
答案 0 :(得分:17)
我知道这个问题有点陈旧,但它仍然具有足够的意义,我正在寻找答案,所以我发布的内容也是如此:
至少在3.2.9+源代码中,你可以包含python“init”文件来获取模块的python函数版本:
>>> execfile('/usr/local/Modules/default/init/python.py')
>>> 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
答案 1 :(得分:4)
我们的一位管理员能够使用对os.popen()
的{{1}}来电来解决问题:
modulecmd
答案 2 :(得分:0)
不是直接的,但这是一种可能的解决方法,具体取决于您的环境。假设您可以使用ENVVAR=value
作为系统命令的序言,您可以按照这些方式执行操作:
import os
os.environ['EDITOR'] = 'vi'
cmd = "EDITOR=%(EDITOR)s $EDITOR" % os.environ
os.system(cmd)
代码将 vi 分配给您的EDITOR环境变量,然后在命令行上传递它并运行命令(在本例中为编辑器)。
答案 3 :(得分:0)
虽然接受的解决方案有效,但我发现编写起来更容易:
import sys
sys.path.insert(0, '/path/to/environment/modules')
# Environment modules become available by loading python.py (the name choice could be better here)
import python as mod
# ...
mod.module('use', '/some/dir')
mod.module('load', 'program/1.2.3')
这对我来说看起来更pythonic,也允许IDE提供自动完成等功能。