Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用带模块加载的python子流程_Python_R_Subprocess - Fatal编程技术网

使用带模块加载的python子流程

使用带模块加载的python子流程,python,r,subprocess,Python,R,Subprocess,我目前正在unix环境中使用Python 2.7。 我需要在python脚本中运行R脚本,但我无法使其正常工作,因为我的R模块需要在之前加载(使用“模块加载”) 下面是我的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) 我一直有相同的错误:“[Errn

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

下面是我的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]没有这样的文件或目录”

有什么想法吗? 我看了看,但没能让它工作

谢谢你的帮助

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

os.system('module load R/3.2.3')
sp.check_output(['Rscript','test.R'])
Python创建一个进程,在其中运行
/bin/sh
,并将该命令传递给shell。模块环境变量在该shell中设置。然后那个炮弹就出来了——任务完成了

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

os.system('module load R/3.2.3')
sp.check_output(['Rscript','test.R'])
之前运行
模块加载
是完全不相关的

那么你怎么能解决这个问题呢?一种可能是显式指定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脚本之前运行
模块加载
。它设置的环境变量可以一直传播到Python中的R调用


顺便说一句,可以直接从Python调用R:

Post整个堆栈跟踪。还要注意脚本的位置,包括python和R脚本,为了方便起见,您可以将它们都放在同一个目录中?