从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
你试过用 chmod u+x /pathTo/Rscript.R
这个命令吗?
3
Shell错误126是一个执行错误。
权限被拒绝意味着你遇到了“权限问题”。
去查看一下那个文件,确保R/Python能够访问它。 我建议你先试试这个:
$sudo chmod 777 /.../plottingfile.R
如果代码能运行,那就给它设置一个正确但不太容易访问的权限。
如果这样还不行,可以试试把R换成Rscript。
12
首先,确保你的 platttingfile.R
脚本放在一个你能找到的地方。通常来说,它和你的其他文件在同一个文件夹里。
我在网上看到有一个工具叫 RScript
,它可以用来从命令行运行 R
脚本。所以,如果你想运行这个脚本,可以用 Python 这样做:
import subprocess
retcode = subprocess.call(['/path/to/RScript','/path/to/plottingfile.R'])
如果一切顺利,这个命令会返回 retcode
0,表示成功。如果你的 platttingfile.R
脚本有输出内容,它会显示在标准输出(STDOUT)上。如果它打开了一个图形界面(GUI),那么那个界面就会弹出来。
如果你想同时捕获标准输出和错误输出,可以这样做:
import subprocess
proc = subprocess.Popen(['/path/to/RScript','/path/to/plottingfile.R'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = proc.communicate()