擅长:python、mysql、java
<p>所以“moduleload”实际上是在调用shell中设置一些环境变量。所以当你这样做的时候:</p>
<pre><code>os.system('module load R/3.2.3')
</code></pre>
<p>Python创建一个进程,在其中运行<code>/bin/sh</code>,并将该命令传递给shell。模块环境变量在该shell中设置。那就退出吧!在</p>
<p>环境变量不能也不能传播回Python进程。所以当你这样做的时候:</p>
^{pr2}$
<p>你以前跑过<code>module load</code>完全不相干。在</p>
<p>你怎么能解决这个问题?一种可能是显式地指定<code>Rscript</code>的路径:</p>
<pre><code>sp.check_output(['/your/full/path/to/Rscript','test.R'])
</code></pre>
<p>另一种方法是组合命令:</p>
<pre><code>sp.check_output('module load R/3.2.3 && Rscript test.R', shell=True)
</code></pre>
<p>最后,您可以在运行Python脚本之前先运行<code>module load</code>。它设置的环境变量可以一直传播到Python中的R调用。在</p>
<p>顺便说一下,可以直接从Python调用R:<a href="http://rpy.sourceforge.net/rpy2/doc-dev/html/introduction.html" rel="nofollow">http://rpy.sourceforge.net/rpy2/doc-dev/html/introduction.html</a></p>