[英]Golang Exec Command Long Output
我怎样才能从一个很长的 ping 命令输出中获得一个 ping 统计信息:
func main() {
cmdout, _ := exec.Command("ping", "127.0.0.1", "-n", "30000").Output()
fmt.Printf("%s\n", cmdout)
}
我只需要这个输出:
Ping statistics for 127.0.0.1:
Packets: Sent = 30000, Received = 30000, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
输出如:
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
...............................................
我只想丢弃。 我正在考虑将所有这些输出放入一个变量中,然后对其进行解析,直到得到所需的结果:
output := string(out)
scanner := bufio.NewScanner(strings.NewReader(output))
for scanner.Scan() {
fmt.Println("Line: ", scanner.Text())
regex compile etc...
}
但是,我不确定这是实现这一目标的有效模式,通过选择这种方式意味着用大量未使用的数据填充 RAM,这不是我正在考虑的。 我是对的吗?
我认为以下代码是我需要的:
func main() {
args := "-n 30000 127.0.0.1"
cmd := exec.Command("ping", strings.Split(args, " ")...)
output, _ := cmd.StdoutPipe()
cmd.Start()
scanner := bufio.NewScanner(output)
for scanner.Scan() {
m := scanner.Text()
matchPackets, _ := regexp.MatchString("Packets", m)
matchMinimum, _ := regexp.MatchString("Minimum", m)
if matchPackets {
fmt.Println("Ping statistics for 127.0.0.1")
fmt.Println(m)
}
if matchMinimum {
fmt.Println("Approximate round trip times in milli-seconds:")
fmt.Println(m)
}
}
cmd.Wait()
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.