首页 > 解决方案 > 从 R 执行批处理文件的问题

问题描述

我在 R 中创建一个函数,在函数的一个步骤中我运行一个批处理文件,这个批处理文件又运行一个不同的程序,它创建了我想要在我的函数中读取的文件。

我正在使用 shell.exec 运行批处理文件并且它运行良好,问题是我的代码的下一行想要读取批处理文件运行的程序的输出,因为它尚未创建.

所以我第一次调用我的函数时遇到错误,但如果我再次调用它,它运行正常。下面的代码示例:基本上发生的情况是我在调用函数时收到一条错误消息,说 .../bat_output.txt 不存在,因为尚未运行批处理文件,但是当我再次调用该函数时,它工作正常。

shell.exec("run.bat")
readout<-read.table("bat_output.txt")

有什么建议么?

标签: rbatch-fileshell-exec

解决方案


shell.exec当脚本在后台运行时立即返回。第一次找不到原因bat_output.txt很可能是脚本还没写完。shell.exec不给你等待的能力或任何信息来确定进程是否仍在运行,所以它可能不是最好的工具。

备择方案:

system("cmd /c run.bat")
system2("cmd", c("/c", "run.bat"))

意识到如果您引用不同的路径,您可能希望/需要normalizePath和/或dQuote它进入这些命令。(R 的system*命令不擅长形成参数。)


推荐阅读