Фон
Я рассматриваю использование функции pingr::ping
в macOS для проверки связи с определенными получателями. Я хочу скрыть pingr::ping
выходных данных в случае неправильного назначения.
Примечания
-
pingr::ping
фактически использует функцию pingr::ping_os
для сборки команды и команду system
для выполнения команды ping. В macOS неправильно отформатированный пункт назначения возвращается в ping
, возвращая сообщение о неправильно отформатированной команде Я хочу скрыть это сообщение от его печати на консоли.
Пример
hide_ping_output(destination = "www.google.com") -> a
hide_ping_output(destination = "wrong destination") -> b
Выход для скрытия
usage: ping [-AaDdfnoQqRrv] [-c count] [-G sweepmaxsize]
[-g sweepminsize] [-h sweepincrsize] [-i wait]
[-l preload] [-M mask | time] [-m ttl] [-p pattern]
[-S src_addr] [-s packetsize] [-t timeout][-W waittime]
[-z tos] host
ping [-AaDdfLnoQqRrv] [-c count] [-I iface] [-i wait]
[-l preload] [-M mask | time] [-m ttl] [-p pattern] [-S src_addr]
[-s packetsize] [-T ttl] [-t timeout] [-W waittime]
[-z tos] mcast-group
Apple specific options (to be specified before mcast-group or host like all options)
-b boundif # bind the socket to the interface
-k traffic_class # set traffic class socket option
-K net_service_type # set traffic class socket options
-apple-connect # call connect(2) in the socket
-apple-time # display current time
[1] NA NA NA
Желаемые результаты
Системный вывод не печатается в случае неправильного назначения.
hide_ping_output(destination = "www.google.com")
hide_ping_output(destination = "wrong destination")
a; b
[1] 190.027 36.846 35.243
[1] NA NA NA
Попытка
sink()
hide_ping_output_sink <- function(...) {
sink(tempfile())
pingr::ping(...)
sink(NULL)
}
hide_ping_output_sink(destination = "wrong destination") -> b
Появляется нежелательный консольный вывод.
usage: ping [-AaDdfnoQqRrv] [-c count] [-G sweepmaxsize]
[-g sweepminsize] [-h sweepincrsize] [-i wait]
[-l preload] [-M mask | time] [-m ttl] [-p pattern]
[-S src_addr] [-s packetsize] [-t timeout][-W waittime]
[-z tos] host
ping [-AaDdfLnoQqRrv] [-c count] [-I iface] [-i wait]
[-l preload] [-M mask | time] [-m ttl] [-p pattern] [-S src_addr]
[-s packetsize] [-T ttl] [-t timeout] [-W waittime]
[-z tos] mcast-group
Apple specific options (to be specified before mcast-group or host like all options)
-b boundif # bind the socket to the interface
-k traffic_class # set traffic class socket option
-K net_service_type # set traffic class socket options
-apple-connect # call connect(2) in the socket
-apple-time # display current time
capture.output
/ invisible
hide_ping_output_capture <- function(...) {
capture.output(invisible(pingr::ping(...) ->> b))
b
}
hide_ping_output_capture(destination = "wrong destination") -> b
Появляется нежелательный вывод на консоль.
>> hide_ping_output_capture(destination = "wrong destination") -> b
usage: ping [-AaDdfnoQqRrv] [-c count] [-G sweepmaxsize]
[-g sweepminsize] [-h sweepincrsize] [-i wait]
[-l preload] [-M mask | time] [-m ttl] [-p pattern]
[-S src_addr] [-s packetsize] [-t timeout][-W waittime]
[-z tos] host
ping [-AaDdfLnoQqRrv] [-c count] [-I iface] [-i wait]
[-l preload] [-M mask | time] [-m ttl] [-p pattern] [-S src_addr]
[-s packetsize] [-T ttl] [-t timeout] [-W waittime]
[-z tos] mcast-group
Apple specific options (to be specified before mcast-group or host like all options)
-b boundif # bind the socket to the interface
-k traffic_class # set traffic class socket option
-K net_service_type # set traffic class socket options
-apple-connect # call connect(2) in the socket
-apple-time # display current time