一尘不染

捕获退出状态和R中系统调用的输出

linux

我已经打了一下,与system()system2()欢乐,我突然想到我能救输出或在对象退出状态。一个玩具的例子:

X <- system("ping google.com",intern=TRUE)

给我输出,而

X <- system2("ping", "google.com")

给我退出状态(在这种情况下为1,google不执行ping操作)。如果我既要输出又要退出状态,则必须执行2次系统调用,这似乎有点过头了。如何仅使用一个系统调用就能同时获得两者?

编辑:如果可能的话,我希望两者都在控制台中,而无需通过stdout="somefile.ext"system2调用中使用临时文件并随后将其读入。


阅读 210

收藏
2020-06-03

共1个答案

一尘不染

从R 2.15开始,system2stdout和/或stderr为TRUE 时,会将返回值作为属性给出。这使获取文本输出和返回值变得容易。

在此示例中,ret最终是带有属性的字符串"status"

> ret <- system2("ls","xx", stdout=TRUE, stderr=TRUE)
Warning message:
running command ''ls' xx 2>&1' had status 1 
> ret
[1] "ls: xx: No such file or directory"
attr(,"status")
[1] 1
> attr(ret, "status")
[1] 1
2020-06-03