gpt4 book ai didi

python - 从我的 python 脚本加载集群上的环境模块

转载 作者:行者123 更新时间:2023-11-30 22:01:14 27 4
gpt4 key购买 nike

我需要向服务器提交一个 python 作业。当它运行时,我需要在它运行时加载和卸载模块,因为它调用多个程序,每个程序都有不同的依赖项,这些依赖项会发生冲突,即 gcc 与 intel。

这个问题之前已经被问过,但在这种情况下答案对我不起作用

Loading environment modules within a python script

loading-environment-modules-within-a-python-script

我尝试过使用以下内容

import subprocess as sub
cmd = 'module load intel/2016.4'
p = sub.Popen(cmd, shell=True, stderr = sub.STDOUT, stdout = sub.PIPE).communicate()[0]
print(p.decode()) # this simply outputs to screen

并且,输出表明模块已被切换。

Lmod is automatically replacing "gcc/5.4.0" with "intel/2016.4".

Due to MODULEPATH changes, the following have been reloaded:
1) openmpi/2.1.1

但是,当我从终端执行“模块列表”时,模块尚未切换。 gcc/5.4.0 仍在加载。此外,需要 intel/2016.4 的程序也无法运行。例如,稍后我希望能够使用需要 intel/2016.4 的 gromacs 版本,但它失败了。

我有点困惑,因为我认为我可以通过 Popen 使用 bash 命令,而“模块加载”是一个 bash 命令。我不想编写 bash 脚本来执行此操作,我的脚本中还有很多其他事情使用 python 比 bash 更方便地完成。

最佳答案

我最近遇到了这个问题。解决此问题的一个简单方法是在所需命令之前包含依赖项,并用分号分隔它们

cmd = 'module load intel/2016.4; "gromacs command"'
p = sub.Popen(cmd, shell=True, stderr = sub.STDOUT, stdout = sub.PIPE).communicate()[0]

其中“gromacs 命令”代表您通常调用 gromacs 的方式。如果您在运行脚本后进行检查,intel/2016.4 不会在您的模块列表中显示为已加载,但 gromacs 将使用 intel/2016.4 从您的 python 脚本内部运行,这就是您想要的。

关于python - 从我的 python 脚本加载集群上的环境模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54120669/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com