2011-07-14 54 views
9

我有一個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

當您從命令行運行無w/o 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腳本。通常它是相同的目錄。

我在互聯網上看到有一個實用工具叫做RScript,它用於從命令行執行R腳本。因此,爲了運行腳本,你會使用Python這樣的:

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

這將成功完成後即返回retcode 0。如果您的plottingfile.R正在返回某種輸出,它將在STDOUT上拋出。如果它拉起一些圖形用戶界面,那麼它會出現。

如果你想捕獲輸出和錯誤,你做這樣的:

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。