R output when script is run form python
我想从python运行一个r脚本,并将输出捕获到一个.rout类型的文件中。R脚本接受命令行参数。我在挣扎…下面是最小工作示例。
R脚本:
1 2 3 4 5 6 7 8 | job_reference <- commandArgs(trailingOnly = TRUE) arg1 <- job_reference[1] arg2 <- job_reference[2] arg3 <- job_reference[3] arg4 <- job_reference[4] print("***") print(paste(arg1, arg2, arg3, arg4)) print("***") |
python脚本:
1 2 3 4 5 6 | import subprocess arg1 = 'a' arg2 = 'b' arg3 = 'c' arg4 = 'd' subprocess.call(["/usr/bin/Rscript", "--no-save","--no-restore","--verbose","print_letters.R", arg1, arg2, arg3, arg4,">","outputFile.Rout","2>&1"]) |
号
python脚本的最后一行是通过stackoverflow链接。
如果运行python脚本,则不会生成"outputfile.rout"。但是,python输出包括:
1 2 | running '/usr/lib/R/bin/R --slave --no-restore --no-save --no-restore --file=print_letters.R --args a b c d > outputFile.Rout' |
当我从命令行运行它而不涉及python时,就会生成输出文件。请注意,我已经尝试指定输出文件等的完整路径。
有人能解释一下i)这里发生了什么;ii)我如何从python运行r脚本,让r脚本接受命令行参数并生成rout类型的文件?
事先谢谢。
i)这里发生了什么
您获取的
从
shell=False disables all shell based features
号
换句话说,
虽然有两种方法可以做到这一点,例如使用
1 2 3 4 5 | with open('outputFile.Rout','w') as fileobj: subprocess.call(["/usr/bin/Rscript", "--no-save","--no-restore", "--verbose","print_letters.R", arg1, arg2, arg3, arg4], stdout=fileobj, stderr=subprocess.STDOUT) |