2011-07-14 24 views
9

私は2つのプロットを作るRスクリプトを持っています。私はPythonからこのスクリプトを実行できるようにしたいと思います。PythonからRスクリプトを実行

私が最初に試さ:

import subprocess 
subprocess.call("/.../plottingfile.R", shell=True) 

をこれは私に次のエラーを与える:

/bin/sh: /.../plottingfile.R: Permission denied 
126 

私が何数126手段を知りません。私のファイルはすべてデスクトップ上にあるので、特別な権限は必要ないと思いますか?私はこのエラーがcwd = noneと何か関係があったかもしれないと思ったが、私はこれを変更したが、まだエラーがあった。

subprocess.Popen(["R --vanilla --args </.../plottingfile.R>"], shell = True) 

をしかし、これはあまりにも私とエラーました:

次は私が次のことを試してみました

/bin/sh: Syntax error: end of file unexpected. 

最近、私が試した:

subprocess.Popen("konsole | /.../plottingfile.R", shell = True) 

これは新しいkonsoleのを開設しますRスクリプトは実行されませんでした。また、次のエラーが発生しました:

/bin/sh: /.../plottingfile.R: Permission denied 

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

+0

Pythonを使用しないでコマンドラインから実行すると、このスクリプトは機能しますか? – wespiserA

+0

http://stackoverflow.com/questions/37350886/simple-way-to-pass-directory-to-r-script-using-python/37351221#37351221 – BMW

答えて

0

あなたはchmod u+x /pathTo/Rscript.Rを試しましたか?

10

最初にまず、あなたがアクセスできる場所にplatttingfile.Rスクリプトがあることを確認してください。通常は同じディレクトリです。

私はインターネットで、コマンドラインからRスクリプトを実行するために使用されるRScriptと呼ばれるユーティリティがあると読んでいます。ですから、このようなパイソンを使用するスクリプトを実行するために:

import subprocess 
retcode = subprocess.call(['/path/to/RScript','/path/to/plottingfile.R']) 

これが正常に完了した時にretcode 0を返します。あなたのplottingfile.Rが何らかの出力を返すならば、STDOUTにスローされます。それが何らかのGUIを引き上げるならば、それは起こります。

あなたがstdoutとstderrをキャプチャしたい場合は、このようにそれを実行します。

import subprocess 
proc = subprocess.Popen(['/path/to/RScript','/path/to/plottingfile.R'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
stdout, stderr = proc.communicate() 

+0

これは私のために働いた。以下の[リンク](http://stackoverflow.com/questions/11679936/python-subprocess-arguments)では、通常のコマンドラインを使用し、文字列に対してsplit()を使用して正確な配列を作成するための巧妙な方法を参照してくださいPopenは期待している。 – jatal

0

何かが私のために、通常は、この作品が好き:

subprocess.Popen("R --vanilla /PATH/plottingfile.R", shell = True) 
3

シェルエラー126が実行されますエラー。

アクセス許可が拒否されているということは、特に「アクセス許可の問題」があることを意味します。

ファイルに移動し、R/Pythonがアクセスできることを確認します。 私が最初にこれを試してみます:

$sudo chmod 777 /.../plottingfile.R 

コードが実行される場合は、それを正しいが、あまりアクセス許可を与えます。

これで解決しない場合は、RをRscriptに変更してみてください。

関連する問題