1

我目前正在使用 python 中的子进程模块进行脚本编写,尽管当我在 shell 中运行它并且尽管任何其他类型的命令在使用子进程模块执行时工作正常,但仍然无法执行命令“模块列表”命令。

我尝试过的两种变体:

p = subprocess.Popen('module list', shell=True)
print(p.communicate()[0])

p = Popen(["module", "list"], stdout=subprocess.PIPE)
print(p.communicate()[0])

对于诸如“echo hello world”之类的命令以及带有多个参数的更长命令,这些格式中的任何一种都可以正常工作。我运行命令的终端是否与用于使用子进程执行命令的 shell 不同?我得到的错误如下:

/bin/bash: line 1: module: command not found

4

2 回答 2

0

Environment Modules 软件的文档提供了有关如何在 Python 中初始化module命令的建议(应该适用于 Python 2 或 3):

import os
exec(open('/usr/share/Modules/init/python.py').read())

一旦初始化,该module函数就可用并且可以通过以下方式使用:

module('sub-command', 'arg1', 'arg2', ...)

例如:

module('load', 'foo', 'bar')
module('list')
module('avail')
于 2019-04-07T07:52:12.540 回答
0

根据您在评论中所说的话,我相信您正在以错误的方式在 Python 中使用环境模块:Modules 本身实际上有一个方法可以将module功能导入 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

当然,使用起来不是很安全,所以我稍微喜欢这里execfile()描述的导入方法(为了 Python 3 支持稍作改动):

import os

if 'PYTHONPATH' in os.environ:
    os.environ['PYTHONPATH'] +=':'+os.environ['MODULESHOME']+"/init"
else:
    os.environ['PYTHONPATH'] = os.environ['MODULESHOME']+"/init"

from python import module
于 2019-04-03T15:35:18.700 回答