我在以下路径中本地保存了.R文件:
Rfilepath = "C:\\python\\buyback_parse_guide.r"
RScript.exe的命令是:
RScriptCmd = "C:\\Program Files\\R\\R-2.15.2\\bin\\Rscript.exe --vanilla"
我试过跑:
subprocess.call([RScriptCmd,Rfilepath],shell=True)
但它返回1 - 并且.R脚本未成功运行。我究竟做错了什么?我是Python的新手,所以这可能是一个简单的语法错误......我也试过这些,但它们都返回1:
subprocess.call('"C:\Program Files\R\R-2.15.2\bin\Rscript.exe"',shell=True)
subprocess.call('"C:\\Program Files\\R\\R-2.15.2\\bin\\Rscript.exe"',shell=True)
subprocess.call('C:\Program Files\R\R-2.15.2\bin\Rscript.exe',shell=True)
subprocess.call('C:\\Program Files\\R\\R-2.15.2\\bin\\Rscript.exe',shell=True)
谢谢!
答案 0 :(得分:0)
RScriptCmd只需要是可执行文件,没有命令行参数。所以:
RScriptCmd = "\"C:\\Program Files\\R\\R-2.15.2\\bin\\Rscript.exe\""
然后Rfilepath实际上可以是所有参数 - 并重命名为:
RArguments = "--vanilla \"C:\\python\\buyback_parse_guide.r\""
答案 1 :(得分:0)
看起来你有类似的问题。我不得不重新安装RScript到一个没有空格的路径。
请参阅:Running Rscript via Python using os.system() or subprocess()
这就是我如何计算Python和Rscript之间的通信:
参与Python:
from subprocess import PIPE,Popen,call
p = subprocess.Popen([ path/to/RScript.exe, path/to/Script.R, Arg1], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
out = p.communicate()
outValue = out[0]
执行Script.R 后, outValue
包含输出值
参与R-Script:
args <- commandArgs(TRUE)
argument1 <- as.character(args[1])
...
write(output, stdout())
output
是要发送给Python的变量