那麼,「模塊負載」實際上是在調用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
發佈整個堆棧跟蹤。還要小心腳本所在的位置,包括python和R腳本,以便您可以將它們放在同一個目錄中。 – gplayer
在您的工作目錄中是否是test.R? –