首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Python调用R脚本不会在版本4中保存日志文件

从Python调用R脚本不会在版本4中保存日志文件
EN

Stack Overflow用户
提问于 2021-01-25 15:16:26
回答 2查看 257关注 0票数 8

我从python调用一个非常简单的名为RCode.R的R脚本

代码语言:javascript
复制
args <- commandArgs(TRUE)
print(args)
source(args[1])

setwd("<YOUR PATH>")
output <- head(mtcars, n = n)
write.table(output, "output.txt")

使用以下脚本:

代码语言:javascript
复制
import subprocess

pth = "<YOUR PATH>"


subprocess.call(" ".join(["C:/R/R-3.6.0/bin/x64/R.exe", "-f", '"' + pth + '/R Code.R"', "--args", 
                '"' + pth + '/arguments.txt"',"1>", '"' + pth + '/log.txt"', "2>&1"]))


subprocess.call(" ".join(["C:/R/R-4.0.3/bin/x64/R.exe", "-f", '"' + pth + '/R Code.R"', "--args", 
                '"' + pth + '/arguments.txt"',"1>", '"' + pth + '/log.txt"', "2>&1"]))

其中arguments.txt包含:n <- 10

问题是,当我使用R-4.0.3时,log.txt文件不会生成,我需要转储一个日志文件,因为它在后面的进程中自动查找日志文件。

在CMD (Windows)中执行以下命令时:

代码语言:javascript
复制
C:/R/R-4.0.3/bin/x64/R.exe -f "<YOUR PATH>/R Code.R" --args "<YOUR PATH>/arguments.txt" 1> "<YOUR PATH>/log.txt" 2>&1'

它确实工作得很完美,只有当它嵌入到另一个软件中时才是如此。

另外,我尝试了在名称中没有空格,并从根文件夹调用脚本,而不必指定路径。知道它为什么对R-4不起作用吗?*或者更好的是,如何解决它?

谢谢!

帕德:谢谢你,马丁,你的建议,让我提出了一个更好的问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-29 14:54:30

帮人解决了这个问题谢谢邓肯·默多克!

解决方案1:

代码语言:javascript
复制
import os
pth = "<YOUR PATH>"
os.system(" ".join(["C:/R/R-4.0.3/bin/x64/R.exe", "-f", '"' + pth + '/RCode.R"', "--args", 
                '"' + pth + '/arguments.txt"',"1>", '"' + pth + '/log.txt"']))

解决方案2:

代码语言:javascript
复制
import subprocess
pth = "<YOUR PATH>"
subprocess.call(" ".join(["1>", '"' + pth + '/log.txt"', "2>&1",
                          "C:/R/R-4.0.3/bin/x64/R.exe", "-f", '"' + pth + '/RCode.R"', "--args", 
                '"' + pth + '/arguments.txt"']), shell = True)
票数 5
EN

Stack Overflow用户

发布于 2021-01-26 11:33:44

在一种情况下(3.6.0)使用R.exe,在另一种情况下使用(4.0.3) Rscript.exe。R和Rscript都存在了很长一段时间,它们的行为总是略有不同。

你真的不应该把它们混淆在一起(即使在Windows上,我知道,它们看起来像同一个文件。)他们的行为不一样)。

好的,现在两种方法都使用R.exe。为了找出更多/看更多的问题可能发生的地方,你能试一下

使用最小可复制示例的setwd(.))

  • not

  • ,即我们可以直接使用的示例,即不使用"<YOUR PATH>" (也不使用带有' ' (空格)的文件名),例如,使用来自“终端”/shell的
  1. ,而不是用作python子进程?

最后但并非最不重要的一点是:是的,对于R4.0.0,使用了一个完全更新的工具集("brandnew“,例如更新得多的C编译器)来构建Rtools、”RTools4.0“或rtools40https://cran.r-project.org/bin/windows/Rtools/。因此,人们预计会发生变化,但通常情况下,变化只会变得更好,而不是更糟。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65887485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档