从python执行R脚本

时间:2011-07-14 03:30:46

标签: python r

我有一个R脚本,可以制作几个图。我希望能够从python执行这个脚本。

我第一次尝试:

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

感谢。

4 个答案:

答案 0 :(得分:11)

首先,确保您在可以访问的地方使用platttingfile.R脚本。通常它是同一个目录。

我在互联网上读到有一个名为RScript的实用程序,它用于从命令行执行R脚本。所以为了运行脚本,你可以像这样使用python:

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()

答案 1 :(得分:3)

Shell错误126是执行错误。

拒绝许可意味着您具有“权限问题”。

转到该文件并确保R / Python能够访问它。 我先试试这个:

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

如果代码运行,请为其提供正确但不易访问的权限。

如果这不起作用,请尝试将R更改为Rscript。

答案 2 :(得分:0)

你试过chmod u+x /pathTo/Rscript.R吗?

答案 3 :(得分:0)

通常对我来说这项工作很喜欢:

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