【发布时间】:2020-10-20 19:20:55
【问题描述】:
寻找一个选项,让我将 R 诊断消息(由 message() 生成)重定向到 stdout,而不是默认情况下的 stderr。
message 手动状态:
默认处理程序将消息发送到 stderr() 连接。
所以问题是如何更改此默认行为?仍然保持warning() 和stop() 的重定向不变。
已经尝试过 sink type='message',但它会重定向所有(消息、警告、错误)。
如果有人愿意测试,这是示例脚本exec_test.R:
print("using print")
cat("using cat\n")
message("using message")
warning("using warning")
stop("using stop")
q("no")
然后将被执行:
Rscript exec_test.R 1>> exec_test.Rout 2>> exec_test_error.Rout
我不使用 2>&1,因为我的脚本会产生大量 messages,而且很少出现真正的错误,因此我需要将这些日志存储在单独的文件中。
【问题讨论】:
-
为什么要这样做?当你运行它时,如果你在某处记录它,你不能只添加
2>&1吗? -
@doctorlove 我已经更新了问题。
-
我不敢相信人们看不到这样做的好处 - 将消息、警告和错误全部发送到 stderr 并在 R 控制台中以相同的颜色打印意味着您无法在潜在的众多诊断消息中发现实际问题?!
-
我一直在寻找没有运气的答案。我也有同样的情况。我希望我的 stderr 日志在操作上有意义,而不是某些随机包作者决定的任何内容,但我不想只是将它们关闭。我希望他们在更详细的日志中报告,而不是标准错误。
-
@jamie.f.olson 您可能总是要求包维护人员将
message更改为cat+ 提供指向此 SO 的链接。简单地说,message如果发送到 stderr,则不能被视为 消息,因此不应将其用作 消息。