2016-04-28 52 views
0

我目前在unix環境中使用Python 2.7。 我需要在我的Python腳本運行[R腳本,但我不能管理,使其工作,因爲我的R組件的需求(用「模塊加載」)在模塊加載中使用python子進程

這裏是我的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) 

我一直有同樣的錯誤:「[錯誤2]沒有這樣的文件或目錄」

任何想法? 我看了herehere,但無法使它工作。

謝謝你的幫助!

+0

發佈整個堆棧跟蹤。還要小心腳本所在的位置,包括python和R腳本,以便您可以將它們放在同一個目錄中。 – gplayer

+0

在您的工作目錄中是否是test.R? –

回答

0

那麼,「模塊負載」實際上是在調用shell中設置一些環境變量。所以,當你這樣做:

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

Python的創建過程,它運行/bin/sh,並傳遞命令外殼。模塊環境變量在該shell中設置。然後shell退出 - 完成工作!

環境變量不會 - 也不能 - 傳播回Python進程。所以,當你這樣做:

sp.check_output(['Rscript','test.R']) 

這是完全不相干的,你跑前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) 

最後,你可以簡單地運行module load在運行你的Python腳本前第一名。它設置的環境變量可以一直傳播到Python中的R調用。

順便說一句,有可能直接從Python中調用R:

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

謝謝您的回答:http://rpy.sourceforge.net/rpy2/doc-dev/html/introduction.html

0

它具有完美的作品!