Мы можем использовать вызов system2
, чтобы получить статус возврата команды ping в оболочке.В Windows (и, вероятно, в Linux) будет работать следующее:
ping <- function(x, stderr = FALSE, stdout = FALSE, ...){
pingvec <- system2("ping", x,
stderr = FALSE,
stdout = FALSE,...)
if (pingvec == 0) TRUE else FALSE
}
# example
> ping("google.com")
[1] FALSE
> ping("ugent.be")
[1] TRUE
Если вы хотите захватить вывод команды ping, вы можете либо установить stdout = ""
, либо использовать системный вызов:
> X <- system("ping ugent.be", intern = TRUE)
> X
[1] "" "Pinging ugent.be [157.193.43.50] with 32 bytes of data:"
[3] "Reply from 157.193.43.50: bytes=32 time<1ms TTL=62" "Reply from 157.193.43.50: bytes=32 time<1ms TTL=62"
[5] "Reply from 157.193.43.50: bytes=32 time<1ms TTL=62" "Reply from 157.193.43.50: bytes=32 time<1ms TTL=62"
[7] "" "Ping statistics for 157.193.43.50:"
[9] " Packets: Sent = 4, Received = 4, Lost = 0 (0% loss)," "Approximate round trip times in milli-seconds:"
[11] " Minimum = 0ms, Maximum = 0ms, Average = 0ms"
с помощью опции intern = TRUE
позволяет сохранить выходные данные в векторе.Я оставляю это читателю в качестве упражнения, чтобы перестроить это, чтобы получить приличный вывод.