【问题标题】:Execute .R script within Python using Rscript.exe shell使用 Rscript.exe shell 在 Python 中执行 .R 脚本
【发布时间】:2012-11-17 01:38:30
【问题描述】:

我在以下路径本地保存了一个 .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)

谢谢!

【问题讨论】:

    标签: python r rscript


    【解决方案1】:

    RScriptCmd 需要只是可执行文件,没有命令行参数。所以:

    RScriptCmd = "\"C:\\Program Files\\R\\R-2.15.2\\bin\\Rscript.exe\""
    

    那么 Rfilepath 实际上可以是所有参数 - 并重命名:

     RArguments = "--vanilla \"C:\\python\\buyback_parse_guide.r\""
    

    【讨论】:

    • 还是不行。我尝试了上述方法并做到了: subprocess.call([RScriptCmd,RArguments],shell=True)
    • 当您从命令提示符运行相同的命令时会发生什么?一些程序在成功时错误地返回一个非零值(但怀疑 R 会这样做)
    • C:\Program Files>C:\Program Files\R\R-2.15.2\bin\Rscript.exe --vanilla C:\python\ buyback_parse_guide.r 'C:\Program'未被识别为内部或外部命令、可运行程序或批处理文件。
    • 我试过RScriptCmd = "C:\\Program Files\\R\\R-2.15.2\\bin\\Rscript.exe"RArgs = "--vanilla C:\\python\\buyback_parse_guide.r"。也没有用。绝对是我没有看到的语法错误
    • 这在 cmd.exe 中起作用:"C:\Program Files\R\R-2.15.2\bin\Rscript.exe" --vanilla C:\python\buyback_parse_guide.r
    【解决方案2】:

    看起来你和我有类似的问题。我不得不将 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]
    

    outValue 包含执行脚本后的输出值。R

    R 脚本的一部分:

    args <- commandArgs(TRUE)
    argument1 <- as.character(args[1])
    ...
    write(output, stdout())
    

    output 是要发送到 Python 的变量

    【讨论】:

      最近更新 更多