【发布时间】:2019-06-06 12:00:27
【问题描述】:
比方说,我写了一个形式的压缩函数:
compress <- function(text, file){
c <- paste0("gzip -c > ",shQuote(file))
p <- pipe(c, open = "wb")
on.exit(close(p))
writeLines(text, p)
}
现在我可以像这样压缩字符串了:
compress("Hello World", "test.gz")
system("zcat test.gz")
## Hello World
但是,如何检查gzip 调用的程序pipe() 是否成功?
例如
compress("Hello World", "nonexistent-dir/test.gz")
## sh: nonexistent-dir/test.gz: No such file or directory
导致在 STDERR 上打印错误消息,但我无法创建 R 错误。程序继续运行而不保存我的文本。
我知道我可以在这个例子中检查目标文件是否存在。但是有很多可能的错误,比如磁盘空间结束、找不到程序、缺少某些库、找到程序but the ELF interpreter was not 等等。我只是想不出任何方法来测试所有可能的错误。
我搜索了帮助页面?pipe,但没有找到任何提示。
作为一种特定于 UNIX 的方法,我尝试捕获 SIGPIPE 信号,但找不到执行此操作的方法。到目前为止,有关此主题的 Stack Overflow 问题仍未得到解答 [1] [2]
如何检查以pipe() 调用的程序的退出代码或提前终止?
【问题讨论】: