在模块加载中使用python子进程

2024-10-04 01:32:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在unix环境中使用python2.7。 我需要在python脚本中运行R脚本,但我无法使其正常工作,因为我的R模块需要在加载之前加载(使用“moduleload”)

下面是我的python脚本:

import os
import subprocess as sp

os.system('module load R/3.2.3')
out = sp.check_output(['Rscript','test.R'], universal_newlines=True)

我一直有同样的错误:“[Errno 2]没有这样的文件或目录”

有什么想法吗? 我看了here和{a2},但没法让它工作。在

谢谢你的帮助!在


Tags: 模块import脚本环境oscheckasunix
2条回答

所以“moduleload”实际上是在调用shell中设置一些环境变量。所以当你这样做的时候:

os.system('module load R/3.2.3')

Python创建一个进程,在其中运行/bin/sh,并将该命令传递给shell。模块环境变量在该shell中设置。那就退出吧!在

环境变量不能也不能传播回Python进程。所以当你这样做的时候:

^{pr2}$

你以前跑过module load完全不相干。在

你怎么能解决这个问题?一种可能是显式地指定Rscript的路径:

sp.check_output(['/your/full/path/to/Rscript','test.R'])

另一种方法是组合命令:

sp.check_output('module load R/3.2.3 && Rscript test.R', shell=True)

最后,您可以在运行Python脚本之前先运行module load。它设置的环境变量可以一直传播到Python中的R调用。在

顺便说一下,可以直接从Python调用R:http://rpy.sourceforge.net/rpy2/doc-dev/html/introduction.html

它与以下各项完美结合:

    sp.check_output('module load R/3.2.3 && Rscript test.R', shell=True)

谢谢你的回答!在

相关问题 更多 >