首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python中的子进程模块声明“模块列表”的“命令未找到”?

python中的子进程模块声明“模块列表”的“命令未找到”?
EN

Stack Overflow用户
提问于 2019-04-02 03:42:06
回答 2查看 1.1K关注 0票数 1

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

我尝试了两个变体:

代码语言:javascript
运行
复制
p = subprocess.Popen('module list', shell=True)
print(p.communicate()[0])

代码语言:javascript
运行
复制
p = Popen(["module", "list"], stdout=subprocess.PIPE)
print(p.communicate()[0])

对于像'echo hello world‘这样的命令,甚至是带有多个参数的更长的命令,这两种格式都可以很好地工作。我运行命令的终端与使用子进程执行命令的shell是否不同?我得到的错误如下:

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

EN

回答 2

Stack Overflow用户

发布于 2019-04-03 23:35:19

根据您在评论中所说的,我相信您在Python中使用环境模块的方式是错误的:正如here所解释的那样,模块本身实际上有一个方法可以将module功能导入到Python中

代码语言:javascript
运行
复制
>>> 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而稍作修改):

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2019-04-07 15:52:13

环境模块软件的文档提供了关于如何在Python语言中初始化module命令的建议(应该可以在Python2或Python3上运行):

代码语言:javascript
运行
复制
import os
exec(open('/usr/share/Modules/init/python.py').read())

初始化后,module函数即可用,并可通过以下方式使用:

代码语言:javascript
运行
复制
module('sub-command', 'arg1', 'arg2', ...)

例如:

代码语言:javascript
运行
复制
module('load', 'foo', 'bar')
module('list')
module('avail')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55462445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档