在Linux中,当我重新路由包含进度条的R代码的输出时(来自progressr包),日志文件中没有捕获进度条(我用tail -f output.log
监视日志文件)。我需要这个设置作为我的应用程序之一,它执行R代码是监视这些日志文件,并显示在其GUI中。
下面是我在centos 7(R4.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
监控进度,我在日志文件中没有得到任何进度条更新。有人有线索吗?
1条答案
按热度按时间qojgxg4l1#
多亏了保罗的评论,我得到了一个很好的线索。需要完成两个单独的事情,
options(progressr.enable=TRUE)
和... list(progressr::handler_progress(enable = TRUE...
。这些使progressr消息在非交互模式。