我目前正在使用python中的子进程模块来编写脚本,尽管当我在shell中运行它时可以正常工作,并且在使用子进程模块执行命令时任何其他类型的命令都可以正常工作,但我仍然无法执行命令'module list‘。
我尝试了两个变体:
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
发布于 2019-04-03 23:35:19
根据您在评论中所说的,我相信您在Python中使用环境模块的方式是错误的:正如here所解释的那样,模块本身实际上有一个方法可以将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()并不是很安全,所以我稍微倾向于使用描述为here的导入方法(为了支持Python3而稍作修改):
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-07 15:52:13
环境模块软件的文档提供了关于如何在Python语言中初始化module命令的建议(应该可以在Python2或Python3上运行):
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')https://stackoverflow.com/questions/55462445
复制相似问题