I'm looking at using pingr::ping function on macOS to ping certain destinations. I want to hide pingr::ping outputs in case of a malformatted destination.
pingr::ping actually makes use of pingr::ping_os function to assemble command and system command to execute ping. On macOS, malformatted destination returns in ping returning a message about wrongly formatted command. I want to hide that message from being printed to console.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
No system output is printed in case of a malformatted destination.
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
Unwanted console output appears.
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 / invisiblehide_ping_output_capture <- function(...) {
capture.output(invisible(pingr::ping(...) ->> b))
b
}
hide_ping_output_capture(destination = "wrong destination") -> b
Unwanted console output appears.
>> 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
I can't find a way to divert the system messages if they are created. They don't seem to come from R's message stream.
The best solution I can find is modifying ping:
hide_ping_output <- function(...) {
f <- pingr::ping
body(f)[[4]] <- quote(output <- suppressWarnings(system(os$cmd,
intern = !verbose, ignore.stderr = TRUE)))
f(...)
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With