在Linux中,当我重新路由包含进度条(来自progressr包)的R代码的输出时,日志文件中没有捕获进度条(我正在使用
tail -f output.log
监视日志文件)。我需要此设置才能工作,因为执行 R 代码的应用程序之一正在监视这些日志文件并在其 GUI 中显示它们。
下面是我在centos 7 (R 4.0.2) 中测试的代码。该代码位于名为 test.R 的文件中。
require(progress)
require(progressr)
slow_sum <- function(x) {
p <- progressr::progressor(along = x)
sum <- 0
for (kk in seq_along(x)) {
Sys.sleep(1)
sum <- sum + x[kk]
p(message = sprintf("Adding %g", x[kk]))
}
sum
}
progressr::handlers(
list(progressr::handler_progress(
format = ":spin :current/:total (:message) -- [:bar] :percent in :elapsed ETA: :eta\r",
width = 60,
complete = "+")))
progressr::with_progress(y <- slow_sum(1:10))
然后当我尝试从终端执行以下代码时
R --no-save --args < ~/test.R >> output.log 2>&1
并使用
tail -f output.log
监视进度,我在日志文件中没有收到任何进度条更新。有人有线索吗?
多亏了保罗的评论,我得到了很好的引导。需要完成两件单独的事情,
options(progressr.enable=TRUE)
和... list(progressr::handler_progress(enable = TRUE...
。这些在非交互模式下启用进度消息。