从python执行R脚本

2024-10-04 09:19:39 发布

您现在位置:Python中文网/ 问答频道 /正文

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

谢谢。


Tags: import脚本truebinsh错误shellcall
3条回答

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

Shell错误126是一个执行错误。

拒绝的权限意味着您有一个特别的“权限问题”。

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

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

如果代码运行,请给它正确但不易访问的权限。

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

首先,确保您的plattingfile.R脚本位于可以访问的位置。通常是同一个目录。

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

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

这将在成功完成后返回retcode0。如果plottingfile.R返回某种输出,它将在STDOUT上抛出。如果它拉起一些图形用户界面,那么它就会出现。

如果要捕获stdout和stderr,请按如下方式执行:

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

相关问题 更多 >