python中的子进程模块声称'找不到''模块列表'的命令?

问题描述 投票:0回答:2

我目前正在使用python中的子进程模块进行脚本编写,并且无法执行命令'module list',尽管这在我在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

python scripting subprocess environment-modules
2个回答
0
投票

基于你在评论中所说的内容,我相信你正在以错误的方式使用Python中的环境模块:模块本身实际上有一种方法可以将module功能导入Python,如here所述:

>>> 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描述的导入方法(稍微修改了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

0
投票

环境模块软件的文档提供了有关如何在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')
© www.soinside.com 2019 - 2024. All rights reserved.