我有一个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
感谢。
答案 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)