从Python执行R脚本

10 投票
4 回答
15095 浏览
提问于 2025-04-16 21:29

我有一个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()

撰写回答