2016-04-28 13 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) 

「[Errno 2]そのようなファイルやディレクトリはありません」同じエラーが発生し続ける

ご存知ですか? herehereのように見えましたが、機能しませんでした。

ありがとうございました!

+0

スタックトレース全体を送信します。また、PythonとRの両方のスクリプトが存在する場所には注意してください。そのため、同じディレクトリに簡単に置くことができます。 – gplayer

+0

作業ディレクトリにtest.Rはありますか? –

答えて

0

実際に "モジュールロード"と呼ばれるものは、呼び出し側シェルにいくつかの環境変数が設定されています。あなたがこれを行うときに:

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

Pythonは、プロセスを作成し、それに/bin/shを実行し、シェルにそのコマンドを渡します。モジュール環境変数はそのシェルで設定されます。そのシェルは終了します - 完了しました!

環境変数は、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) 

最後に、あなたは、単にであなたのPythonスクリプトを実行する前に、module loadを実行することができます最初の場所。設定された環境変数は、Python内のR呼び出しに至るまで伝播できます。ところで

は、Pythonから直接Rを起動することが可能である:http://rpy.sourceforge.net/rpy2/doc-dev/html/introduction.html

0

それはと完璧に動作します:

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

は、あなたの答えをありがとう!

関連する問題